| ||||||||||
| 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 | |||||||||
为什么啊。。。。。type bigint=array[-1000..1000] of integer;
var c,g,i,j,k,weight,ii:integer;
loct:array[-15..15] of integer;
f:array[0..1,-1000..1000] of integer;
function calc(m:integer;a:bigint):bigint;
begin
for j:=-1000 to 1000 do
if f[ii,j-m]>0 then inc(a[j]);
calc:=a;
end;
procedure calc1(m,i:integer);
begin
for j:=-1000 to 1000 do begin
if f[ii,j]>0 then f[1-ii,j]:=f[ii,j];
f[1-ii,j]:=f[1-ii,j]+f[ii,j-m];
end;
end;
begin
readln(c,g);
for i:=1 to c do read(loct[i]);
readln;
fillchar(f,sizeof(f),0);
f[0,0]:=1;
ii:=0;
for i:=1 to g do begin
read(weight);
for k:=1 to c do begin
f[1-ii]:=f[ii];
//f[1-ii]:=calc(weight*loct[k],f[ii]);
calc1(weight*loct[k],ii);
ii:=1-ii;
end;
end;
writeln(f[ii,0] div 2);
end.
背包?
恩..
把各种C和M组和
然后DP f[i,j]=f[i-1,j] (f[i-1],j<>0)
f[i,j]=f[i,j]+f[i-1,j-m]
求f[0]的值
用滚动数组存的,因为不知道该怎么逆着求。。
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator