精选问答
统计单词个数(2001年NOIP全国联赛提高组)为什么只有80分?给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1

2019-04-16

统计单词个数(2001年NOIP全国联赛提高组)为什么只有80分?
给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个)。要求将此字母串分成k份(1单词在给出的一个不超过6个单词的字典中。
要求输出最大的个数。
uses math;
var
b,f:array[0..210,0..210]of longint;
h:array[1..210,1..210]of boolean;
c:array[1..200]of string;
s,s1:string;
i,j,n,o,m,p,x,k:longint;
begin
readln(o);
for p:=1 to o do begin
fillchar(h,sizeof(h),false);
fillchar(b,sizeof(b),0);
fillchar(f,sizeof(f),0);
s:='';
readln(n,m);
for i:=1 to n do begin
readln(s1);
s:=s+s1;end;
readln(x);
for i:=1 to x do
readln(c[i]);
for i:=1 to length(s)do
for j:=1 to i do
for k:=1 to x do
if copy(s,j,i-j+1)=c[k]then h[j,k]:=true;
for i:=1 to length(s)do
for j:=i downto 1 do
for k:=1 to x do
if h[j,k]and(length(c[k])<=i-j+1)then
b[j,i]:=max(b[j,i],b[j+1,i]+1)else b[j,i]:=max(b[j,i],b[j+1,i]);
for i:=1 to length(s)do
f[i,1]:=b[1,i];
for k:=2 to m do
for i:=1 to length(s)do
if k f[i,k]:=max(f[i,k],f[j,k-1]+b[j+1,i]);
writeln(f[length(s),m]);end;
end.
测试点#a1.in 结果:AC 内存使用量: 620kB 时间使用量: 0ms
测试点#a2.in 结果:AC 内存使用量: 620kB 时间使用量: 0ms
测试点#a3.in 结果:WA 内存使用量: 624kB 时间使用量: 0ms
测试点#a4.in 结果:AC 内存使用量: 624kB 时间使用量: 4ms
测试点#a5.in 结果:AC 内存使用量: 620kB 时间使用量: 4ms
为什么只有80分?
最好在原程序上修改。
优质解答
这道题目需要高精度,谢谢 这道题目需要高精度,谢谢