需要排序的01背包。

这种题排序时只需要考虑两个怎么排,重载小于号就可以了。

需要注意的是,如果一个物品你想先放进背包里,那么你排序是要放到后面!01背包的放置顺序的倒着的!

看到别人的博客都只是比较了q-p,表示不解,但是都能AC。。。是谁错了呢?或者我这种表达式可以化成那个样子?

AC代码:

#include <iostream>
#include <cstring>
#include <algorithm> using namespace std; // (1 ≤ N ≤ 500, 1 ≤ M ≤ 5000), (1 ≤ Pi ≤ Qi ≤ 100, 1 ≤ Vi ≤ 1000), int p[505], q[505], v[505];
int dp[5005]; /**
n个物品,有qi的钱才能买,需要花费pi,价值vi,求最大价值
直接01背包会出错,需要排序。
排序时考虑其中两个物品i,j
买i,j和买j,i分别需要max(q[i], p[i]+q[j]) max(q[j], p[j]+q[i])
*/ struct node{
int p, q, v;
bool operator < (const node a) const
{
//return q > a.q;
int x = max(q, p + a.q);
int y = max(a.q, a.p + q);
return x > y;
}
} a[505]; int main()
{
int n, m;
while (cin >> n >> m)
{
for (int i = 0; i < n; ++i)
cin >> a[i].p >> a[i].q >> a[i].v;
sort(a, a + n);
memset(dp, 0, sizeof dp);
for (int i = 0; i < n; ++i)
{
for (int j = m; j >= a[i].q; --j)
{
dp[j] = max(dp[j], dp[j - a[i].p] + a[i].v);
}
}
cout << dp[m] << endl;
}
return 0;
}

  

最新文章

  1. C#委托使用详解(Delegates)
  2. ECMAScript Web APIs node.js
  3. jQuery管理包装集笔记
  4. [转]扩展RBAC用户角色权限设计方案
  5. AJax中post与get请求注意事项
  6. centos7下yum安装mysql
  7. ajax常用参数
  8. mac下phpstorm左侧的project列表找不到了
  9. Unity3d + NGUI 的多分辨率适配(黑边)
  10. POJ-3678 Katu Puzzle 2sat
  11. asp.net各种获取客户端ip方法
  12. 文件夹oradiag_是如何产生的
  13. 控制流之break
  14. plsql developer日期时间格式设置
  15. Python中使用多进程来实现并行处理的方法小结
  16. JavaScript Json(转)
  17. html button 点击 显示倒计时秒数
  18. windows安装mongodb服务简洁版教程
  19. .net Forms身份验证不能用在应用的分布式部署中吗?
  20. 美食类Web原型制作分享-Taste

热门文章

  1. 【JSTL EL】 jsp 页面学习
  2. SGU481 Hero of Our Time
  3. 开启CURL扩展,让服务器支持PHP curl函数(远程采集)
  4. HDU4523+简单
  5. loadrunner 脚本和replaylog中的中文乱码问题(转载)
  6. 冒泡排序BubbleSort
  7. Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)
  8. RichEdit 各个版本介绍
  9. 【Linux安全】系统资源监控与进程终止
  10. Android最佳实践指南