讨论 / 30愚蠢的矿工,看看哪不对
zhanglin 2010-08-09 19:00:00
点我顶贴 收藏 删除
RT

var

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

go:array[0..1000] of longint;

w:array[0..1000] of longint;

n,m,i,j,k,t,ans,a,b:longint;

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

begin

if a<b then exit(b);

exit(a);

end;

function dfs(i,j:longint):longint;

var

k,x:longint;

begin

if f[i,j]<>-maxlongint then exit(f[i,j]);

f[i,j]:=0;

dfs:=0;

k:=go[i];

for x:=1 to j-1 do

f[i,j]:=max(dfs(k,j-x)+w[i],f[i,j]);

exit(f[i,j]);

end;

begin

assign(input,'ycdkg.in');

reset(input);

assign(output,'ycdkg.out');

rewrite(output);

readln(n,m);

for i:=1 to n do read(w[i]);

for i:=1 to n do for j:=0 to m do f[i,j]:=-maxlongint;

for i:=1 to n do

begin

readln(a,b);

go[b]:=a;

end;

for i:=1 to m do f[0,i]:=0;

for i:=1 to n do

begin

ans:=max(ans,dfs(i,m));

end;

writeln(ans);

close(input);

close(output);

end.

查看更多回复
提交回复