var
f,g:array[0..100,0..100] of longint
n,i,j,k,m,s,r,time:longint
a,b,c:array[1..100] of longint
begin
read(n)
for i:=1 to n do
read(a[i],b[i],c[i])
fillchar(f,sizeof(f),0)
fillchar(g,sizeof(g),0)
read(m,r)
for i:=1 to n do
for j:=m downto a[i] do
for k:=r downto b[i] do
begin
if f[j,k]=f[j-a[i],k-b[i]]+1 then
if g[j,k]>g[j-a[i],k-b[i]]+c[i] then
g[j,k]:=g[j-a[i],k-b[i]]+c[i]
if f[j,k]<f[j-a[i],k-b[i]]+1 then
begin
f[j,k]:=f[j-a[i],k-b[i]]+1
g[j,k]:=g[j-a[i],k-b[i]]+c[i]
end
end
write(g[m,r])
end.
其中f数组是干嘛的啊?有点不明白
rmb,rp,time:array[1..100] of integer;
procedure init;
var i:integer;
begin
readln(n);
for i:=1 to n do
readln(rmb[i],rp[i],time[i]);
readln(m,r);
end;
procedure dp;
var i,j,k:integer;
begin
for i:=1 to n do
for j:=m downto rmb[i] do
for k:=r downto rp[i] do
begin
if f[j,k]=f[j-rmb[i],k-rp[i]]+1 then
if g[j,k]>g[j-rmb[i],k-rp[i]]+time[i] then
g[j,k]:=g[j-rmb[i],k-rp[i]]+time[i];
if f[j,k]<f[j-rmb[i],k-rp[i]]+1 then
begin
f[j,k]:=f[j-rmb[i],k-rp[i]]+1;
g[j,k]:=g[j-rmb[i],k-rp[i]]+time[i];
end;
end;
end;
begin
assign(input,’e:/i.in’);
assign(output,’e:/i.out’);
reset(input);
rewrite(output);
init;
fillchar(f,sizeof(f),0);
fillchar(g,sizeof(g),0);
dp;
write(g[m,r]);
close(input);
close(output);
end.
继续发布。。。
var f,g:array[0..100,0..100] of longint;n,m,r,i,j:integer;
rmb,rp,time:array[1..100] of integer;
procedure init;
var i:integer;
begin
readln(n);
for i:=1 to n do
readln(rmb[i],rp[i],time[i]);
readln(m,r);
end;
procedure dp;
var i,j,k:integer;
begin
for i:=1 to n do
for j:=m downto rmb[i] do
for k:=r downto rp[i] do
if f[j,k]=f[j-rmb[i],k-rp[i]]+1 then
if g[j,k]>g[j-rmb[i],k-rp[i]]+time[i] then
g[j,k]:=g[j-rmb[i],k-rp[i]]+time[i]
else if f[j,k]<f[j-rmb[i],k-rp[i]]+1 then
begin
f[j,k]:=f[j-rmb[i],k-rp[i]]+1;
g[j,k]:=g[j-rmb[i],k-rp[i]]+time[i];
end;
end;
begin
assign(input,’e:/i.in’);
assign(output,’e:/i.out’);
reset(input);
rewrite(output);
init;
fillchar(f,sizeof(f),0);
fillchar(g,sizeof(g),0);
dp;
write(g[m,r]);
close(input);
close(output);
end.
请问牛们,这两段代码为什么不一样呢??注意DP子程序里面的IF语句的不同,可为什么上面写就对,而下面的就不对呢?