讨论 / 为什么我老超时?
zhujy 2010-10-29 05:47:00
点我顶贴 收藏 删除
请指教

program rom;

var

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

m,w,s:array[1..1000]of longint;

n,i,max,j,k,v:longint;

begin

readln(n,v);

for i:=1 to n do

readln(m[i],w[i],s[i]);

for i:=1 to n do

for j:=1 to v do

begin

max:=0;

for k:=0 to m[i] do

if (j>=w[i]*k)and(f[i-1,j-w[i]*k]+s[i]*k>max) then max:=f[i-1,j-w[i]*k]+s[i]*k;

f[i,j]:=max

end;

write(f[n,v])

end.

#1 181818181818@2008-03-05 02:19:00
回复 删除
不是过了吗?
#2 wxfred@2008-03-08 23:32:00
回复 删除
我也是

program dp;

var

m,w,s:array[1..2000] of integer;

f:array[0..500] of longint;

n,maxv,i,maxn:longint;

function min(p,q:longint):longint;

begin

if p<q then exit(p) else exit(q);

end;

function max(p,q:longint):longint;

begin

if p>q then exit(p) else exit(q);

end;

procedure dynamic;

var

i,j,k,p,q:longint;

begin

for i:=1 to n do

begin

p:=maxv div w[i];

q:=min(p,m[i]);

for j:=1 to q do

for k:=maxv-w[i] downto 0 do f[k+w[i]]:=max(f[k+w[i]],f[k]+s[i]);

end;

for i:=1 to maxv do maxn:=max(maxn,f[i]);

write(maxn);

end;

begin

read(n,maxv);

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

dynamic;

end.

#3 tracy@2008-04-20 07:09:00
回复 删除
貌似要边读边做才不超时哦……
#4 407137009@2010-10-29 05:47:00
回复 删除

题目:逃亡的准备

状态: Accepted

测评机: Xeost[5]

得分: 100分

提交日期: 2010-10-29 20:45:00

有效耗时: 1985毫秒

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

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

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

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

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

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

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

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

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

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

查看更多回复
提交回复