20120973 2013-11-26 21:31:10
点我顶贴
收藏
删除
var m,n,i,j,k,p:longint;
f,a,b:array[0..320]of longint;
v,w:array[0..100,0..100]of longint;
begin
read(m,n);
fillchar(v,sizeof(v),0);
fillchar(w,sizeof(w),0);
for i:=1 to n do
begin
read(a[i],b[i],p);(临时数组)
a[i]:=a[i] div 10;
if p=0 then
begin
inc(v[i,0]);
v[i,v[i,0]]:=a[i];
w[i,v[i,0]]:=a[i]*b[i];
end;
if p<>0 then
begin
inc(v[p,0]);
v[p,v[p,0]]:=a[p]+a[i];
w[p,v[p,0]]:=a[p]*b[p]+a[i]*b[i];
end;
【【【【 if v[p,0]=3 then
begin
inc(v[p,0]);
v[p,v[p,0]]:=v[p,2]+a[i];
w[p,v[p,0]]:=w[p,2]+a[i]*b[i];
end;
end;】】】(就是这一块)
m:=m div 10;
for i:=1 to n do
for k:=1 to v[i,0] do
for j:= m downto 0 do
if j>=v[i,k] then
if f[j]<f[j-v[i,k]]+w[i,k] then
f[j]:=f[j-v[i,k]]+w[i,k];
write(f[m]*10);
end.
第一种的【】块表示:
当主件有第二个附件,在第二个附件与主件合并之后。
将第二个附件和‘已经打包在一起的第一个附件与主件’打包在一起;
这种方法 为什么过不了?那里有问题?