PASCAL采药解析

来源:百度知道 编辑:UC知道 时间:2024/06/06 03:43:36
program machine;
var a:array[0..1000] of integer;
t,m,i,j,p,t1:integer;
begin
readln(t,m);
for i:=1 to m do
begin
readln(t1,p);
if t1<=t then
for j:=t downto t1 do
if a[j]<a[j-t1]+p then a[j]:=a[j-t1]+p;
end;
writeln(a[t]);
end.

begin
machine;
end;

看不懂啊。。那位高手帮我用浅显易懂的方式讲一遍。。感激不尽啊!

program machine;
var a:array[0..1000] of integer;
t,m,i,j,p,t1:integer;
begin
readln(t,m);
for i:=1 to m do
begin
readln(t1,p);
if t1<=t then
for j:=t downto t1 do 体积
if a[j]<a[j-t1]+p then a[j]:=a[j-t1]+p; 如果当前体积(未采)小于采了的价值那么a[j]:=a[j-t1]+p,a[j]为当前体积,a[j-t1]为减去当前体积后所剩余的,P为价值
end;
writeln(a[t]); 输出最多的价值
end.

找《背包九讲》吧,上面写的很清楚,这个仅是最基础的背包问题,且用的是一维数组做的

自己看程序写结果就知道了!