讨论 / [20分悬赏]马棚问题 记忆化搜索 为何错?
webeskycn001 2009-11-07 03:37:00
点我顶贴 收藏 删除
program horse;

const

maxm=99999999;

var

i,j,k,n:longint;

b,w:array[0..510]of longint;

ff:array[0..510,0..510]of longint;

function dfs(dep,m:longint):longint;

var

i,x,p,tmp:longint;

begin

if (dep>=0)and(m<=0)then exit(maxm);

if ff[dep,m]<>-1 then exit(ff[dep,m]);

tmp:=maxm;

for i:=1 to m-(dep-1) do

begin

p:=dfs(dep-1,m-i);

if tmp>p then

begin

tmp:=p;

x:=i;

end;

end;

ff[dep,m]:=tmp+(b[m]-b[m-x])*(w[m]-w[m-x]);

exit(ff[dep,m]);

end;

begin

b[0]:=0;

w[0]:=0;

readln(n,k);

if n=k then begin writeln(0); exit; end;

for i:=0 to n do

for j:=0 to n do

ff[i,j]:=-1;

for i:=1 to n do

begin

readln(j);

if j=0 then

begin w[i]:=w[i-1]+1; b[i]:=b[i-1]; end

else

begin w[i]:=w[i-1]; b[i]:=b[i-1]+1; end;

end;

for i:=1 to n do

ff[1,i]:=w[i]*b[i];

writeln(dfs(k,n));

end.

记忆化搜索只能得30分....

实在不知道哪里错了...请大牛赐教,谢谢

#1 webeskycn001@2009-11-04 19:27:00
回复 删除
哦,知道哪儿错了。。。。Accepted了。。。

program horse;

const

maxm=99999999;

var

i,j,k,n:longint;

b,w:array[0..510]of longint;

ff:array[0..510,0..510]of longint;

function dfs(dep,m:longint):longint;

var

i,p,tmp:longint;

begin

if (dep>=0)and(m<=0)then exit(maxm);

if ff[dep,m]<>-1 then exit(ff[dep,m]);

tmp:=maxm;

for i:=1 to m-(dep-1) do

begin

p:=dfs(dep-1,m-i)+(w[m]-w[m-i])*(b[m]-b[m-i]); // 这样才能记录当前的值,上面的那个错误的代码记录的不是当前值;

if tmp>p then tmp:=p;

end;

ff[dep,m]:=tmp;

exit(ff[dep,m]);

end;

begin

b[0]:=0;

w[0]:=0;

readln(n,k);

if n=k then begin writeln(0); exit; end;

for i:=0 to n do

for j:=0 to n do

ff[i,j]:=-1;

for i:=1 to n do

begin

readln(j);

if j=0 then

begin w[i]:=w[i-1]+1; b[i]:=b[i-1]; end

else

begin w[i]:=w[i-1]; b[i]:=b[i-1]+1; end;

end;

for i:=1 to n do

ff[1,i]:=w[i]*b[i];

writeln(dfs(k,n));

end.

#2 webeskycn001@2009-11-04 19:27:00
回复 删除
状态题目:马棚问题

题目编号:273-马棚问题 查看该题

状态: Accepted

测评机: Xeost[5]

得分: 100分

提交日期: 2009-11-5 11:24:00

有效耗时: 1424毫秒

测试结果1: 通过本测试点|有效耗时313ms

测试结果2: 通过本测试点|有效耗时46ms

测试结果3: 通过本测试点|有效耗时266ms

测试结果4: 通过本测试点|有效耗时172ms

测试结果5: 通过本测试点|有效耗时62ms

测试结果6: 通过本测试点|有效耗时47ms

测试结果7: 通过本测试点|有效耗时47ms

测试结果8: 通过本测试点|有效耗时204ms

测试结果9: 通过本测试点|有效耗时204ms

测试结果10: 通过本测试点|有效耗时63ms

#3 zsx@2009-11-07 03:37:00
回复 删除
又是低级错误
查看更多回复
提交回复