讨论 / 奇怪
zetrain 2011-10-27 18:10:00
点我顶贴 收藏 删除
为什么初始化为F[0,0]:=1

与for i:=1 to n do f[1,i]:=(sum[i+w-1]-sum[w-1]+10000) mod 10;

在此贴上我的AC代码

//don't understand

var n,m,i,j,w,k,ans:longint;

sum:array[0..10000]of int64;

f:array[0..1000,0..1000]of longint;

function min(a,b:longint):longint;

begin

if a>b then exit(b);

exit(a);

end;

function max(a,b:longint):longint;

begin

if a>b then exit(a);

exit(b);

end;

begin

readln(n,m);

for i:=1 to n do begin readln(sum[i]); sum[i+n]:=sum[i]; end;

for i:=1 to 2*n do sum[i]:=sum[i]+sum[i-1];

ans:=maxlongint;

for w:=1 to n do

begin

for i:=0 to m do

for j:=0 to n do f[i,j]:=100000;

for i:=1 to n do f[1,i]:=(sum[i+w-1]-sum[w-1]+100000)mod 10;

for i:=2 to m do

for j:=i to n do

for k:=j-1 downto i-1 do

f[i,j]:=min(f[i,j],f[i-1,k]*((sum[j+w-1]-sum[k+w-1]+100000)mod 10));

ans:=min(ans,f[m,n]);

end;

writeln(ans);

ans:=0;

for w:=1 to n do

begin

fillchar(f,sizeof(f),0);

for i:=1 to n do f[1,i]:=(sum[i+w-1]-sum[w-1]+100000)mod 10;

for i:=2 to m do

for j:=i to n do

for k:=j-1 downto i-1 do

f[i,j]:=max(f[i,j],f[i-1,k]*((sum[j+w-1]-sum[k+w-1]+100000)mod 10));

ans:=max(ans,f[m,n]);

end;

writeln(ans);

end.

查看更多回复
提交回复