pascal高人请进

来源:百度知道 编辑:UC知道 时间:2024/06/07 19:06:28
八( 1 )班由于在期中考中获得了团体第一名,班主任吴老师决定开一场庆功会。于是购买东西的任务就交给了小李同学(钱由班会出)。由于小李同学四肢发达,头脑简单,于是这个任务便落到了你头上(当然不要你跑腿。跑腿是小李的事 ^_^ )

注:可以全买,但不能不买。即至少买 1 种

[ 输入格式 ]

第一行二个数 n(n<=500) , m(m<=5000) ,其中 n 代表希望购买的物品的种数, m 表示班会拨给小李的钱数。

接下来 n 行,每行 3 个数, v 、 w 、 s ,分别表示第 I 种物品的价格、价值(价格 与 价值 是不同的概念)和购买的数量(只能买 0 件或 s 件),其中 v<=100,w<=1000,s<=10

[ 输出格式 ]

共两行:

第一行:一个数,表示此次购买能获得的最大的价值(注意!不是价格)。

第二行:小李此次购买(能获得的最大价值)所选择的物品种类的序号。

[ 输入样例 ]

5 1000

80 20 4

40 50 9

30 50 7

40 30 6

20 20 1

[ 输出样例 ]

1000

2 3 4 5

program wangjiban;
var f:array[0..5000] of integer;
b:array[0..5000] of string;
n,m,i,v,w,s:longint;

function make(x,y:longint):string;
begin
str(x,make);
if b[y]<>'' then make:=' '+make;
end;

procedure zop(c,w:integer);
var j:integer;
begin
for j:=m downto c do
if (f[j-c]+w)>f[j] then
begin
f[j]:=f[j-c]+w;
b[j]:=b[j-c]+make(i,j-c);
end;
end;

begin
assign(input,'a.txt');
reset(input);
assign(output,'b.txt');
rewrite(output);

readln(n,m);
for i:=1 to n do
begin
readln(w,v,s);
w:=w*s;
v:=v*s;
zop(w,v);
end;
writeln(f[m]);
writeln(b[m]);

close(input);
close(output);
end.