Proud Merchants---hdu3466(有01背包)
2015-11-25 15:43
197 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466
与顺序有关的01背包。
如果一个物品p = 5,q = 7,一个物品p = 5,q = 9,如果先算第一个,那么当次只有7,8...m可以进行状态转移,装第二个物品的时候9,10..m进行转移,第二个物品转移就可以借用第一个物品的那些个状态,而第二个物品先转移,第一个再转移则不能。当然,还有价格有关,当限制一样价格不同时顺序就影响结果。一种组合的排序策略--限制又小价格又贵的先选,也就是q-p小的先选。为什么这样呢?A:p1,q1 B: p2,q2,先选A,则至少需要p1+q2的容量,而先选B则至少需要p2+q1,如果p1+q2>p2+q1,那么要选两个的话的就要先选A再选B,公式可换成q1-p1 > q2-p2,就按这样的方法排序最后的顺序就是最优的顺序。
该题要确保Q[i]-P[i]小的先被”挑选“,差值越小使用它的价值越大(做出的牺牲越小).
View Code
与顺序有关的01背包。
如果一个物品p = 5,q = 7,一个物品p = 5,q = 9,如果先算第一个,那么当次只有7,8...m可以进行状态转移,装第二个物品的时候9,10..m进行转移,第二个物品转移就可以借用第一个物品的那些个状态,而第二个物品先转移,第一个再转移则不能。当然,还有价格有关,当限制一样价格不同时顺序就影响结果。一种组合的排序策略--限制又小价格又贵的先选,也就是q-p小的先选。为什么这样呢?A:p1,q1 B: p2,q2,先选A,则至少需要p1+q2的容量,而先选B则至少需要p2+q1,如果p1+q2>p2+q1,那么要选两个的话的就要先选A再选B,公式可换成q1-p1 > q2-p2,就按这样的方法排序最后的顺序就是最优的顺序。
该题要确保Q[i]-P[i]小的先被”挑选“,差值越小使用它的价值越大(做出的牺牲越小).
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> #include <cstdlib> using namespace std; #define N 510 #define met(a, b) memset(a, b, sizeof(a)) int dp[N*10], n, m; struct node { int v, q, p, qp; }a ; int cmp(node p, node q) { return p.qp<q.qp; } int main() { while(scanf("%d %d", &n, &m)!=EOF) { met(a, 0); met(dp, 0); for(int i=1; i<=n; i++) { scanf("%d%d%d", &a[i].p, &a[i].q, &a[i].v); a[i].qp = a[i].q - a[i].p; } sort(a+1, a+n+1, cmp); for(int i=1; i<=n; i++) { for(int j=m; j>=a[i].q; j--)///dp[j]表示剩余j元钱所能购买物品的最大价值; dp[j] = max(dp[j], dp[j-a[i].p]+a[i].v); } printf("%d\n", dp[m]); } return 0; }
View Code
相关文章推荐
- 如何优化 Android Studio 启动、编译和运行速度?
- C++内存管理
- prim poj1789
- view测量onMeasure
- hadoop的mapreduce原理解析
- java学习笔记--java第一课,java入门基础篇
- Using Swift with Cocoa and Objective-C(Swift 2.0版):开始--基础设置
- Swift互用性: 使用Objective-C特性编写Swift类(Swift 2.0版)
- MySQL 5.7新特性
- jQuery :10款优秀的文件管理插件
- Spring MVC 教程,快速入门,深入分析
- quad 和 plane 区别是什么?
- GruntJS常用前端流程自动化配置-【持续优化】
- suau 公约公倍
- 4.TableLayout、回调接口
- Drupal 7.31SQL注入getshell漏洞利用详解及EXP
- javascript巧用eval函数组装表单输入项为json对象的方法
- syslog-ng配置
- Screen-Space Bent Cones (SSBC) in Unity5
- 单一职责原则(Single Responsibility Principle)