| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:多重背包转化为01背包,我的63ms才过,换成完全背包再写下。。。In Reply To:多重背包转化为01背包,我的63ms才过,换成完全背包再写下。。。 Posted by:lijingwei at 2011-08-17 14:20:33 我写的多重+优化 16ms
贴下代码
顺便问下LZ的做法 貌似跟我的不同
Program P1276;
const
maxc=100000;
maxn=10;
var
f:array[-maxc..maxc]of boolean;
v:array[-maxc..maxc]of longint;
sum,w:array[1..maxn]of longint;
cash,n:longint;
procedure init;
var i:longint;
begin
fillchar(sum,sizeof(sum),0);
fillchar(w,sizeof(w),0);
read(cash);
read(n);
for i:=1 to n do read(sum[i],w[i]);
readln;
fillchar(f,sizeof(f),false);
fillchar(v,sizeof(v),0);
end;
procedure main;
var i,j,k,cmax,tmp:longint;
begin
cmax:=0;
f[0]:=true;
for i:=1 to n do
begin
for j:=cmax downto 0 do
if f[j] then
for k:=1 to sum[i] do
begin
tmp:=j+w[i]*k;
if tmp>cash then break;
if (v[tmp]<>0)and(v[tmp]<v[j]+1) then break;
v[tmp]:=v[j]+1;
f[tmp]:=true;
if tmp>cmax then cmax:=tmp;
end;
end;
writeln(cmax);
end;
begin
assign(input,'P1276.in');
assign(output,'P1276.out');
reset(input);
rewrite(output);
while not eof do
begin
init;
main;
end;
close(input);
close(output);
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator