讨论 / 分组背包只有20分,WHY
悠着点 2008-10-26 04:29:00
点我顶贴 收藏 删除
var n,m,i,j,k:integer;

q:int64;

a,b:array[1..20]of integer;

c:array[1..20,1..200]of int64;

f:array[0..200]of int64;

begin

readln(n,m);

for i:=1 to m do

begin

readln(a[i],b[i]);

for j:=1 to n do

begin

q:=j;

for k:=1 to b[j]-1 do

q:=q*j;

c[i,j]:=a[i]*q;

end;

end;

f[0]:=0;

for i:=1 to n do f[i]:=1000000;

for i:=1 to m do

for j:=n downto 0 do

for k:=0 to j do

begin

if f[j]>f[j-k]+c[i,k] then f[j]:=f[j-k]+c[i,k];

end;

writeln(f[n]);

end.

#1 181818181818@2008-03-27 02:44:00
回复 删除
你貌似样例都没过
#2 181818181818@2008-03-27 02:47:00
回复 删除
我把你的程序改了一个字,就过了
#3 小岛@2008-10-26 04:29:00
回复 删除
for k:=1 to b[j]-1 do

O(∩_∩)O~ 嘻嘻……~发现了

查看更多回复
提交回复