讨论 / 谁来给讲讲?
kingoffighters 2008-10-31 03:02:00
点我顶贴 收藏 删除
program gfpascal

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数组是干嘛的啊?有点不明白

#1 xiaokeke@2008-10-30 04:53:00
回复 删除
f是泡到的MM的个数,

G是时间吧

#2 kingoffighters@2008-10-30 05:01:00
回复 删除
那为什么要记录这个呢?给讲一下嘛
#3 kingoffighters@2008-10-30 05:33:00
回复 删除
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

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语句的不同,可为什么上面写就对,而下面的就不对呢?

#4 zxfszane@2008-10-31 03:02:00
回复 删除
ding
查看更多回复
提交回复