讨论 / 神牛来看看错哪儿了
1134737006 2009-09-23 02:16:00
点我顶贴 收藏 删除
program ppp;

var a,p:array[-100..2000,-100..2000] of int64;

q,jz,z,d,e,f:array[-1000..1000000] of int64;

zq,i,j,k,l,m,n,o,r,s,t,y,x:longint;

begin

read(zq,n);

for i:=1 to n do

read(q[i],jz[i],z[i]);k:=0;

for i:=1 to n do

if z[i]=0 then begin

inc(k);d[i]:=k;a[k,0]:=q[i]*jz[i];p[k,0]:=q[i];end;

for i:=1 to n do begin

if z[i]<>0 then

begin

inc(e[z[i]]);

a[z[i],e[z[i]]]:=a[z[i],0]+q[i]*jz[i];

p[z[i],e[z[i]]]:=p[z[i],0]+q[i];

if e[z[i]]=2 then begin

a[z[i],3]:=a[z[i],1]+q[i]*jz[i];

p[z[i],3]:=p[z[i],1]+q[i];end;end;end;

for i:=1 to k do

for j:=zq downto 0 do

for l:=0 to 3 do

if j>=p[i,l] then

if f[j]<=f[j-p[i,l]]+a[i,l] then

f[j]:=f[j-p[i,l]]+a[i,l];

write(f[zq]);end.

#1 webeskycn@2009-09-22 10:02:00
回复 删除
我n久之前的垃圾代码...

供鄙视..

program jmysfa;

var

a,b,c:longint;

i,j,m,n:longint;

v,p:array[1..60]of longint;

fsv,fsp:array[1..60,1..3]of longint;

ff:array[0..60,0..33000]of longint;

function maxff(m1,m2,m3,m4,m5:longint):longint;

begin

if m2>m1 then m1:=m2;

if m4>m3 then m3:=m4;

if m3>m1 then m1:=m3;

if m5>m1 then m1:=m5;

maxff:=m1;

end;

begin

readln(m,n);

fillchar(fsv,sizeof(fsv),0);

fillchar(fsp,sizeof(fsp),0);

for i:=1 to n do

begin

readln(a,b,c);

if c=0 then begin v[i]:=a; p[i]:=b; end

else

begin

if fsv[c,1]<>0 then

begin

fsv[c,2]:=a;

fsp[c,2]:=b;

end

else

begin

fsv[c,1]:=a;

fsp[c,1]:=b;

end;

end;

end;

for i:=1 to n do

for j:=0 to m do

begin

if j>=v[i]+fsv[i,1]+fsv[i,2] then

ff[i,j]:=maxff(ff[i-1,j],ff[i-1,j-v[i]]+p[i]*v[i],ff[i-1,j-v[i]-fsv[i,2]]+p[i]*v[i]+fsp[i,2]*fsv[i,2],ff[i-1,j-v[i]-fsv[i,1]]+p[i]*v[i]+fsv[i,1]*fsp[i,1],ff[i-1,j-v[i]-fsv[i,1]-fsv[i,2]]+p[i]*v[i]+fsp[i,1]*fsv[i,1]+fsp[i,2]*fsv[i,2])

else

if j>=v[i]+fsv[i,1] then

ff[i,j]:=maxff(ff[i-1,j],ff[i-1,j-v[i]-fsv[i,1]]+p[i]*v[i]+fsp[i,1]*fsv[i,1],-maxlongint,-maxlongint,-maxlongint)

else

if j>=v[i]+fsv[i,2] then

ff[i,j]:=maxff(ff[i-1,j],ff[i-1,j-v[i]-fsv[i,2]]+p[i]*v[i]+fsp[i,2]*fsv[i,2],-maxlongint,-maxlongint,-maxlongint)

else

if j>=v[i] then

ff[i,j]:=maxff(ff[i-1,j],ff[i-1,j-v[i]]+p[i]*v[i],-maxlongint,-maxlongint,-maxlongint)

else

ff[i,j]:=ff[i-1,j];

end;

writeln(ff[n,m]);

end.

#2 light_zsx@2009-09-23 02:16:00
回复 删除
var a,b:array[0..60,0..3] of longint;

jl:array[1..60] of integer;

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

k,i,j,m,n,v,d,p,l:longint;

begin(读入)

read(m,n);

for i:=1 to n do begin

read(v,d,l);

if l=0 then begin

a[i,0]:=v;b[i,0]:=v*d; end

else

begin

if a[l,1]<>0 then begin

a[l,2]:=v+a[l,0];

b[l,2]:=v*d+b[l,0];

jl[l]:=2;

end

else begin

a[l,1]:=v+a[l,0];

b[l,1]:=v*d+b[l,0];

jl[l]:=1;

end;

end;

end;

(处理主附件)

for i:=1 to n do

if (a[i,1]<>0)and(a[i,2]<>0)and(a[i,0]<>0) then begin

a[i,3]:=a[i,1]+a[i,2]-a[i,0];

b[i,3]:=b[i,1]+b[i,2]-b[i,0];

jl[i]:=3; end;

for i:=1 to n do if a[i,0]<>0 then

for j:=m downto 0 do

for p:=0 to jl[i] do

if (b[i,p]+f[j-a[i,p]]>=f[j])and(j-a[i,p]>=0) then

f[j]:=b[i,p]+f[j-a[i,p]];

write(f[m]);

end.

查看更多回复
提交回复