type ddd= record
v,t,h,w:longint;
end;
var f:array[0..300,0..300] of longint ;
a:array[0..200,0..200] of ddd;
c:array[0..300] of longint;
temp:ddd;
i,j,k,m,tt,n,s,t,z,x,y,u,v:longint;
f1:text;
function max(a,b:longint):longint;
begin
max:=a;
if max< b then max:= b;
end;
begin
assign(f1,’zin.in’);
reset(f1);
read(f1,n,m,tt);
for i:= 1 to n do
read(f1,a[i,1].v,a[i,1].t,a[i,1].h,a[i,1].w);
close(f1);
for i:= 1 to n-1 do
for j:= i+1 to n do
if a[i,1].v<a[j,1].v then
begin
temp:=a[i,1];
a[i,1]:=a[j,1];
a[j,1]:=temp;
end;
i:=1; m:=n;
for j:= 1 to n do c[j]:=1;
repeat
if a[i,1].v<>a[i+1,1].v then inc(i)
else
begin
inc(c[i]);
a[i,c[i]].h:=a[i+1,1].h;
a[i,c[i]].v:=a[i+1,1].v;
a[i,c[i]].t:=a[i+1,1].t;
a[i,c[i]].w:=a[i+1,1].w ;
dec(m);
for j:=i+1 to m do
begin
temp:=a[j+1,1];
a[j,1]:=temp;
end;
end;
until i=m;
n:=m;
for i:= 1 to n do
for j:= m downto 0 do
for k:= tt downto 0 do
for x:=1 to c[i] do
if (a[i,x].t+k<=tt)and(a[i,x].h+j<m) then
f[j+a[i,x].h,k+a[i,x].t]:=max(f[j+a[i,x].h,k+a[i,x].t],f[j,k]+a[i,x].w);
z:=-maxlongint;
for i:= 1 to m-1 do
for j:= 1 to tt do
z:=max(z,f[i,j]);
writeln(z);
end.
PROGRAM DFG;
var
value,t,h,w:array[0..100] of longint;
a:array[0..100,0..100] of longint;
i,j,k,m,n,l,tm,em:longint;
begin
readln(n,em,tm);
em:=em-1;
for i:=1 to n do
readln(value[i],t[i],h[i],w[i]);
for i:=1 to n do
for j:=tm downto t[i] do
for k:=em downto h[i] do
if a[j,k]<a[j-t[i],k-h[i]]+w[i] then
a[j,k]:=a[j-t[i],k-h[i]]+w[i];
writeln(a[tm,em]);
end.
第二行到n+1行,每行4个数,value,time,h,w
3 5 100
5 2 2 3000
5 2 2 3000
3 1 1 30
不考虑价值相等可以过吗?