比赛 |
20141105 |
评测结果 |
AAAAAAAAAAAAAATTTTTT |
题目名称 |
神奇的压缩机 |
最终得分 |
70 |
用户昵称 |
东方老败 |
运行时间 |
6.244 s |
代码语言 |
Pascal |
内存使用 |
0.20 MiB |
提交时间 |
2014-11-05 11:39:39 |
显示代码纯文本
var n,i,j,k,a,b,l,o1,o2,o3:longint;
s:array[0..5013]of ansistring;
f:array[0..5013]of longint;
u,v,t,p,q:ansistring;
ch:char;
procedure init;
begin
i:=1;
while not seekeoln do
begin
read(ch);
s[i]:=s[i-1]+ch;
s[0]:=s[0]+ch;
inc(i);
end;
l:=i-1;
while s[0,l]=' ' do
begin
delete(s[0],l,1);
dec(l);
end;
readln(a,b);
end;
function min(x,y:longint):longint;
begin
if x<y then exit(x);exit(y);
end;
procedure work;
begin
fillchar(f,sizeof(f),$7f);
f[0]:=0;
for i:=1 to l do
begin
f[i]:=f[i-1]+a;
for j:=(i+1) div 2 to i-1 do
begin
u:=s[i];delete(u,1,j);
k:=pos(u,s[j]);
if k=0 then continue;
if (k<>0)and(f[j]+b<f[i]) then f[i]:=f[j]+b;
p:=s[j];o3:=k;
repeat p[o3]:=' ';k:=pos(u,p);if k=0 then break;o3:=k;until false;
k:=o3;
o1:=j-k+1;v:=copy(s[j],j-o1+1,o1);o2:=j-o1;
repeat
if o2-o1<0 then break;
t:=copy(s[o2],o2-o1+1,o1);
if t<>v then break;
if f[o2]+b<f[i] then f[i]:=f[o2]+b;
o2:=o2-o1;
until false;
end;
//writeln(i,' ',f[i],' ');
end;
writeln(f[l]);
end;
begin
assign(input,'WinCHG.in');reset(input);
assign(output,'WinCHG.out');rewrite(output);
init;
work;
close(output);
end.