小A现在获得了m块钱,想要购买一些商品,并且让自己的快乐值最大。 商店总共有n个物品,每个物品有它的标价 ,小A讨价后的真实价格 ,购买商品获得快乐值 。 小A可以用某个顺序来购物。 小A购买一个物品前,必须保证当前的钱,大于等于物品的标注价格 。之后,小A购买一个物品会进 行砍价,最终以 成交,并且获得 快乐值。 每个物品最多买一次,小A可以以任意的顺序购买物品,并希望得到的快乐值之和尽可能大。
输入格式
第一行两个数n,m。
接下来n行,每行三个数
输出格式
一个数表示最高多少价值。
输入样例1
2 10 1 11 6 5 10 5
输出样例1
5
输入样例2
3 10 1 10 5 9 9 5 9 10 5
输出样例2
10
样例解释 小A只能买第二个物品。
rt,01背包稍微改了一点,各位大佬调一下行吗
#include<bits/stdc++.h>
using namespace std;
int v[5009],w[5009],r[5009];
int dp[5009];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>r[i]>>w[i]>>v[i];
for(int i=1;i<=n;i++){
for(int j=m;j>=r[i];j--){
dp[j]=max(dp[j],dp[j-r[i]]+v[i]);
}
}
cout<<dp[m];
return 0;
}