最近,iSea去了一个古老的国家。这么长时间以来,它是世界上最富有和最强大的王国。结果,即使这个国家不再富裕,这个国家的人民仍然感到非常自豪。
商家是最典型的商家,每个商家仅售出一件商品,价格为Pi,但如果您的钱少于Qi,他们会拒绝与您进行交易,并且iSea评估每件商品的值为Vi。
如果他有M个货币单位,那么iSea可以获得的最高价值是多少?
输入中有几个测试用例。每个测试用例均以两个整数N,M(1≤N≤500、1≤M≤5000)开头,指示项目的编号和初始金额。
然后是N行,每行包含三个数字Pi,Qi和Vi(1≤Pi≤Qi≤100,1≤Vi≤1000),其含义在描述中。输入以文件标记结尾终止。
一看,01背包问题
就自然套了01背包的模板,结果发现WA了
为什么呢,对于背包问题需要更深入的理解
对于这个测试样例
3 10
5 10 5
3 5 6
2 7 3
如果按照原来的背包写
结果就应该是9
为什么?
数组是这样的
5 0 0 0 0 0 0 0 0 0
6 6 6 6 6 6 0 0 0 0
9 9 9 9 6 6 0 0 0 0
先遍历第一个商品只有钱大于10可以买,显然只有第一行第一列为5 (遍历钱是逆序的
然后再遍历第二个物品 这个时候显然在第一个物品的基础上 没法两个一起买
为什么?
看代码
for(int i = 1; i <= n; i++) {
for(int j = m; j >= 1; j--) {
if(j >= node[i].q) {
dp