庆功会
Time Limit:10000MS Memory Limit:65536K
Total Submit:20 Accepted:7
Description
八(1)班由于在期中考中获得了团体第一名,班主任吴老师决定开一场庆功会。于是购买东西的任务就交给了小李同学(钱由班会出)。由于小李同学四肢发达,头脑简单,于是这个任务便落到了你头上(当然不要你跑腿。跑腿是小李的事 ^_^)
注:可以全买,但不能不买。即至少买1种
Input
(party)
第一行二个数n(n<=500),m(m <= 5000),其中n代表希望购买的物品的种数,m表示班会拨给小李的钱数。
接下来n行,每行3个数,v、w、s,分别表示第I种物品的价格、价值(价格 与 价值 是不同的概念)和购买的数量(只能买0件或s件),其中v <= 100,w <= 1000,s <= 10
Output
共两行:
第一行:一个数,表示此次购买能获得的最大的价值(注意!不是价格)。
第二行:小李此次购买(能获得的最大价值)所选择的物品种类的序号。
Sample Input
5 1000
80 20 4
40 50 9
30 50 7
40 30 6
20 20 1
Sample Output
1000
2 3 4 5
Source
算法:DP
此题就是一个简单的01背包+记录路径。
01背包就不说了很简单,我选择的记录路径的方法就是开一个字符串数组,然后不停的更新某个容量的背包,即大于之前的值就进行更新替换,最后直接输出即可。
Time Limit:10000MS Memory Limit:65536K
Total Submit:20 Accepted:7
Description
八(1)班由于在期中考中获得了团体第一名,班主任吴老师决定开一场庆功会。于是购买东西的任务就交给了小李同学(钱由班会出)。由于小李同学四肢发达,头脑简单,于是这个任务便落到了你头上(当然不要你跑腿。跑腿是小李的事 ^_^)
注:可以全买,但不能不买。即至少买1种
Input
(party)
第一行二个数n(n<=500),m(m <= 5000),其中n代表希望购买的物品的种数,m表示班会拨给小李的钱数。
接下来n行,每行3个数,v、w、s,分别表示第I种物品的价格、价值(价格 与 价值 是不同的概念)和购买的数量(只能买0件或s件),其中v <= 100,w <= 1000,s <= 10
Output
共两行:
第一行:一个数,表示此次购买能获得的最大的价值(注意!不是价格)。
第二行:小李此次购买(能获得的最大价值)所选择的物品种类的序号。
Sample Input
5 1000
80 20 4
40 50 9
30 50 7
40 30 6
20 20 1
Sample Output
1000
2 3 4 5
Source
算法:DP
此题就是一个简单的01背包+记录路径。
01背包就不说了很简单,我选择的记录路径的方法就是开一个字符串数组,然后不停的更新某个容量的背包,即大于之前的值就进行更新替换,最后直接输出即可。
坑爹的说,最后直接用了chr,也不知道自己为什么这么傻X,这么做只能算10以内的,怪不得只过了1个点。。。
program party;
const
maxn=500;
maxm=6000;
type
atp=record
w,v,num:longint;
end;
var
n,m:longint;
s:array [0..maxm] of ansistring;
a:array [0..maxn] of atp;
f:array [0..maxm] of longint;
procedure init;
var
i:longint;
begin
readln(n,m);
for i:=1 to n do readln(a[i].w,a[i].v,a[i].num);
end;
procedure main;
var
i,j:longint;
ss:ansistring;
begin
for i:=1 to n do
begin
for j:=m downto a[i].num*a[i].w do
begin
if f[j-a[i].num*a[i].w]+a[i].num*a[i].v>f[j] then
begin
f[j]:=f[j-a[i].num*a[i].w]+a[i].num*a[i].v;
str(i,ss);
s[j]:=s[j-a[i].num*a[i].w]+ss+' ';
end;
end;
end;
end;
procedure print;
begin
writeln(f[m]);
writeln(s[m]);
end;
begin
assign(input,'party.in'); reset(input);
assign(output,'party.out'); rewrite(output);
init;
main;
print;
close(input); close(output);
end.