题目描述
八(1)班由于在期中考中获得了团体第一名,班主任吴老师决定开一场庆功会。于是购买东西的任务就交给了小李同学(钱由班会出)。由于小李同学四肢发达,头脑简单,于是这个任务便落到了你头上。
输入格式
第一行二个数n(n<=500),m(m<=6000),其中n代表希望购买的物品的种数,m表示班会拨给小李的钱数。
接下来n行,每行3个数,v、w、s,分别表示第i中物品的价格、价值(价格 与 价值 是不同的概念)和必须购买的数量(要么就不买,要买就只能买s件),其中v<=100,w<=1000,s<=10
输出格式
一个数,表示此次购买能获得的最大的价值(注意!不是价格)。
输入/输出样例1
输入:
5 1000
80 20 4
40 50 9
30 50 7
40 30 6
20 20 1
输出:
1000
分析
算是非常标准的01背包模板题
#include<bits/stdc++.h>
using namespace std;
int n,s;
int a[10000+10],b[10000+10],w[10000+10],f[10000+10];
int main(){
cin>>n>>s;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>w[i]>>b[i];
a[i]*=b[i];
w[i]*=b[i];
}
for(int i=1;i<=n;i++)
{
for(int j=s;j>=a[i];j--)
{
f[j]=max(f[j-a[i]]+w[i],f[j]);
}
}
cout<<f[s];
return 0;
}