program tt;
var
mm:array[0..5000000] of longint;
x,cost:array[0..5] of longint;
a,z:array[1..200] of longint;
b:array[1..200,1..5] of longint;
i,j,k,l,m,n,xx:longint;
procedure init;
begin
readln(n,m);
cost[0]:=1;
for i:=1 to m do
begin
read(x[i]);
cost[i]:=cost[i-1]*x[i];
end;
readln;
for i:=1 to n do
begin
read(a[i]);
for j:=1 to m do
begin
read(b[i,j]);
z[i]:=z[i]+(b[i,j]-1)*cost[j-1];
end;
readln;
end;
end;
procedure tt(s,yy:integer);
var
i:integer;
begin
for i:=x[yy] downto b[s,yy] do
begin
xx:=xx+(i-1)*cost[yy-1];
if yy=1 then
begin
if mm[xx+1]<mm[xx-z[s]]+a[s] then mm[xx+1]:=mm[xx-z[s]]+a[s];
end else tt(s,yy-1);
xx:=xx-(i-1)*cost[yy-1];
end;
end;
begin
init;
for i:=1 to n do tt(i,m);
writeln(mm[cost[m]]);
end.
你看下:
program li;
var n,m,ans:longint;
i,j1,j2,j3,j4,j5,j,k:longint;
v:array[0..5] of longint;
a:array[0..201,0..5] of longint;
f:array[0..5000000] of longint;
function max(a,b:longint):longint;
begin
if a>b then max:=a else max:=b;
end;
begin
readln(n,m);
for i:=1 to m do read(v[i]);
for i:=1 to n do
begin
for j:=0 to m do read(a[i,j]);
readln;
end;
ans:=-maxlongint;
for i:=1 to n do
for j1:=v[1] downto a[i,1] do
for j2:=v[2] downto a[i,2] do
for j3:=v[3] downto a[i,3] do
for j4:=v[4] downto a[i,4] do
for j5:=v[5] downto a[i,5] do
begin
j:=(((j1*(v[2]+1)+j2)*(v[3]+1)+j3)*(v[4]+1)+j4)*(v[5]+1)+j5;
k:=((((j1-a[i,1])*(v[2]+1)+(j2-a[i,2]))*(v[3]+1)+(j3-a[i,3]))*(v[4]+1)+(j4-a[i,4]))*(v[5]+1)+j5-a[i,5];
f[j]:=max(f[k]+a[i,0],f[j]);
ans:=max(f[j],ans);
end;
writeln(ans);
end.