题目:

Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerful kingdom in the world. As a result, the people in this country are still very proud even if their nation hasn’t been so wealthy any more. 
The merchants were the most typical, each of them only sold exactly one item, the price was Pi, but they would refuse to make a trade with you if your money were less than Qi, and iSea evaluated every item a value Vi. 
If he had M units of money, what’s the maximum value iSea could get?

Input

There are several test cases in the input.

Each test case begin with two integers N, M (1 ≤ N ≤ 500, 1 ≤ M ≤ 5000), indicating the items’ number and the initial money. 
Then N lines follow, each line contains three numbers Pi, Qi and Vi (1 ≤ Pi ≤ Qi ≤ 100, 1 ≤ Vi ≤ 1000), their meaning is in the description.

The input terminates by end of file marker.

Output

For each test case, output one integer, indicating maximum value iSea could get.

Sample Input

2 10
10 15 10
5 10 5
3 10
5 10 5
3 5 6
2 7 3

Sample Output

5
11

解题思路:就是求解在已有的menoy基础上,我们能购买多少价值的东西,且买这个东西必须满足你的金额大于一定数值,就算你的钱能买它,如果达不到那个值,也不能购买。

当看到这道题,惊呆了,什么骚操作,怎么用01背包实现,写的垃圾代码秒wa ,之后参考神犇代码 ,发现居然有以q-p排序这骚操作,当时不明白这是原因,后来思考后发现咱们要满足一个原则,在钱多的时候优先购买我们能买的最有用的东西。

自己说的也是比较含糊不清的,转一下神犇的说法

https://blog.csdn.net/chen_lin111/article/details/44702389

要想在限制条件下获得最大价值,要满足买了一件物品后尽量使剩下的钱最多,这样尽量满足下一个物品的限制条件!

假如有两个商品:

物品 价格 限制条件

A p1 q1

B p2 q2

1:先买A,至少有 p1 + q2 元钱;先买B,至少有 p2 + q1 元钱。

2:假设先买A需要的钱少,即 p1 + q2 < p2 + q1,也就是 q1 – p1 > q2 – p2。

3:所以,先买 q – p 大的!需要将这些物品按 q – p 升序排列。

4:咦,有人该问了,不是先买差值大的,那怎么升序排列了?这样不就是先买差值小的了!

5:这个我刚开始也是困惑,下面慢慢分析:

看动态转移方程:dp[ j ] = max(dp[ j ], dp[ j - v[ i ] ] + w[ i ]),计算 j 的时候已经将 j – v[ i ] 算出

就是买第一个的时候已经决定了第二个是否买了。这个要自己有耐心地慢慢体会。。。。。。

还有大神说要满足无后效性:j – v[ i ] 定比 j 先算出来,对物品 i 最小能算到q[ i ] – p[ i ],因此以q[ i ] – p[ i ] 排序。个人感觉与上面的分析有异曲同工之妙。

ac代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 10000
using namespace std;struct nod{int p,q,v;
}node[maxn];
int dp[maxn];
bool cmp(nod a,nod b)
{return a.q-a.p<b.q-b.p;
}int main()
{int n,m;while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++){scanf("%d%d%d",&node[i].p,&node[i].q,&node[i].v);}sort(node,node+n,cmp);memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){for(int j=m;j>=node[i].q;j--){dp[j]=max(dp[j],dp[j-node[i].p]+node[i].v);   }   }printf("%d\n",dp[m]);    }return 0;
}

【HDU 3466】【Proud Merchants】相关推荐

  1. 【HDU 1870 --- 愚人节的礼物】栈水题

    [HDU 1870 --- 愚人节的礼物]栈水题 Description 四月一日快到了,Vayko想了个愚人的好办法--送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Vayko为了愚人,准备了一堆 ...

  2. 【HDU - 3466 】Proud Merchants(dp,背包问题,巧妙排序)

    题干: Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and pow ...

  3. 大数加法【HDU 1002】

    大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...

  4. 【HDU/算法】最短路问题 杭电OJ 2544 (Dijkstra,Dijkstra+priority_queue,Floyd,Bellman_ford,SPFA)

    最短路径问题是图论中很重要的问题. 解决最短路径几个经典的算法 1.Dijkstra算法 单源最短路径(贪心),还有用 priority_queue 进行优化的 Dijkstra 算法. 2.bell ...

  5. 【HDU】3441 Rotation

    题意:给出A和C(1<=A,C<=10^9),所有满足B * B * K + 1 = A * A, (K >= 0)的B,构成边长为B的正方形,等角度的围绕在一个小正方形的周围.用C ...

  6. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)

    题干: Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission ...

  7. 【HDU - 1455】Sticks (dfs + 剪枝)

    题干: George took sticks of the same length and cut them randomly until all parts became at most 50 un ...

  8. 【HDU - 4006】The kth great number (优先队列,求第k大的数)

    题干: Xiao Ming and Xiao Bao are playing a simple Numbers game. In a round Xiao Ming can choose to wri ...

  9. 【HDU - 4217 】Data Structure? (线段树求第k小数)

    题干: Data structure is one of the basic skills for Computer Science students, which is a particular w ...

最新文章

  1. 归纳整理--第2篇--QQ好友
  2. Python之迭代器和生成器
  3. 虹软安卓人脸识别初学
  4. Windows 10下高效工作——快捷键一览
  5. c语言到底写什么系统,用C语言写关于操作系统的一个问题。
  6. android emulator培训,android emulator(未完)
  7. Qt汉字显示乱码的一个简单解决方案
  8. 三维重建/SLAM笔记_最佳学习路线/攻略
  9. 进制转换的方法 详解
  10. plc模拟器软件_举例说明 你的PLC和触摸屏为什么总是通讯不上?
  11. CentOS7各个版本镜像下载地址及说明、Everything版
  12. 有关结合律和优先规律
  13. 直播报名 | 海外社交媒体趋势如何?出海品牌如何掌握消费者洞察?
  14. python 模块paramiko
  15. 5, 10,15,20-四(4-甲氧羰基苯基)卟啉(TPPCOOMe)/5-(对亮氨酸丁氧苯基 )-10 ,15 ,20-三苯基卟啉锌配合物(Zn[Leu-TPP]齐岳定制
  16. (改进GM(1,1)模型)灰色残差马尔科夫预测模型的matlab实现
  17. 计算机网络安全技术相关文献,计算机网络安全技术相关论文参考文献 哪里有计算机网络安全技术参考文献...
  18. 阻容压降电路调试心得
  19. idea同时选中多个相同的内容并编辑和替换
  20. 阿里云BaaS下蚂蚁区块链开发实践(二)

热门文章

  1. python urllib实现js escape
  2. 计算机技工高级职称,高级工程师与高级技师职称有什么区别?快来了解一下吧...
  3. gfoj树形dp 有线电视网
  4. 实验二.Python 运算符与内置函数
  5. 天纵智能软件快速开发平台一般查询分析插件
  6. 生信学习之通路富集一(GO分析)
  7. 低年级语文教学:立足语文学习关注核心素养
  8. 港台明星名字的日语读法
  9. 最新大数据毕业设计题目选题大全 2023
  10. 注释@Excel导出