rt
  • 板块学术版
  • 楼主wattzyh
  • 当前回复5
  • 已保存回复6
  • 发布时间2024/10/24 17:50
  • 上次更新2024/10/24 19:28:46
查看原帖
rt
819319
wattzyh楼主2024/10/24 17:50

小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;
}
2024/10/24 17:50
加载中...