hdu3466_01背包变形 理解无后效性
来源:互联网 发布:和家教睡了知乎 编辑:程序博客网 时间:2024/06/11 23:35
Proud Merchants
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 5607 Accepted Submission(s): 2368
Problem Description
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?
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.
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 1010 15 105 10 53 105 10 53 5 62 7 3
Sample Output
511
题意:普通01背包,但是每个物品除了价格和价值以外还加了一个限制条件SMALLi,只有现在的钱数大于SMALLi的时候才能够购买。
思路:看了一下大牛们都提到了无后效性,想了一想,有点顿悟了。物品按照small-cost排序由小到大排序,因为当small<cost时就是01背包,当small>cost时,相当于0 ~ small-cost的dp不能正常更新,但是small-cost之后的dp还是可以继续正常更新的。也就是说,我们先把small-cost最小的放进去,因为后来的物品一定无法影响到此时small-cost以前的,所以这个物品放入的时候一定无后效性,反之,如果先放入small-cost大的,他无法保证小的small-cost之后的能够被更新到最优状态,所以无法完成DP。
#include<bits/stdc++.h>using namespace std;int dp[5500];struct K{ int cost; int value; int small;}the[550];bool cmp(K a, K b){ return a.small-a.cost < b.small-b.cost;}int main(){ int n,total; while(scanf("%d%d",&n,&total) == 2){ memset(dp,0,sizeof(dp)); for(int i = 1; i <= n; i++) scanf("%d%d%d",&the[i].cost,&the[i].small,&the[i].value); sort(the+1,the+1+n,cmp); for(int i = 1; i <= n; i++) for(int j = total; j >= max(the[i].cost,the[i].small); j--){ dp[j] = max(dp[j],dp[j-the[i].cost]+the[i].value); } printf("%d\n",dp[total]); }}
0 0
- hdu3466_01背包变形 理解无后效性
- 较难处理的背包问题+无后效性的深入理解(09年多校)(3008)
- HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)
- 什么是无后效性?
- HDU 3466 Proud Merchants(变种01背包 + 无后效性)
- 最优化原理与无后效性
- hdu 5035 指数分布无后效性
- 3466Proud Merchants(需消除后效性的01背包)
- uva 11552 无后效性的动态规划
- 动态规划中的最有子结构和无后效性
- 动态规划最优化原理与无后效性
- 后及性、无前溯性与无后效性——马尔可夫过程“无后效性”回溯谈
- 维护无后效性的技巧——立即计算代价
- leetcode -- 392. Is Subsequence 【贪心算法 + 双指针 + 无后效性】
- hdu4433(三维DP,后效性)
- 动态规划(4):消除后效性
- 变形的背包问题
- HDU1114 完全背包变形
- 笔试总结(1)
- HDU-2489-Minimal Ratio Tree
- 瞬时无功功率理论
- ubuntu下终端vim复制到系统剪切板方法
- 北斗七星阵
- hdu3466_01背包变形 理解无后效性
- Matlab入门
- JQuery中$.cookie()方法的使用
- UVa 1658 Admiral (最小费用最大流、拆点法)
- 【usaco 2010 Open】 Time Travel 时间旅行
- leetcode_290. Word Pattern 单词模式识别,识别句子中的单词模式,单词与模式的一一映射
- tensorflow学习笔记之使用tensorflow进行MNIST分类(1)
- sizeof(空类)问题总结
- Javascript模块化编程(三):require.js的用法