【杭电oj】3466 - Proud Merchants(01背包,排序处理)
来源:互联网 发布:caffe softmax layer 编辑:程序博客网 时间:2024/05/22 13:03
Proud Merchants
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 4481 Accepted Submission(s): 1859
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
Author
iSea @ WHU
Source
2010 ACM-ICPC Multi-University Training Contest(3)——Host by WHU
这道题的精髓就在于对于物品的排序上了,如果直接用dp的话,有些物品需要的钱数太高,如果靠后放入背包的话,则不能取走,这样就影响了最优解。
p - q 处理的意思应该为:把价值较高的物品靠前考虑是否放入背包。
代码如下:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{int p,q,v;//花费,限制条件(钱不够不让买),价值 }c[555];bool cmp (node a,node b)//差额越大越优先(价值大) {return a.p - a.q > b.p - b.q;//这个排序方法很巧,但是不是太懂原理 }int dp[5555];int main(){int n,m;//物品数、钱数while (~scanf ("%d %d",&n,&m)){memset (dp,0,sizeof (dp));for (int i = 1 ; i <= n ; i++)scanf ("%d %d %d",&c[i].p,&c[i].q,&c[i].v);sort (c+1,c+1+n,cmp);for (int i = 1 ; i <= n ; i++){for (int j = m ; j >= c[i].q ; j--){dp[j] = max (dp[j] , dp[j-c[i].p] + c[i].v);}}printf ("%d\n",dp[m]);}return 0;}
0 0
- 【杭电oj】3466 - Proud Merchants(01背包,排序处理)
- hdu3466 Proud Merchants(排序+01背包)
- hdu 3466 Proud Merchants(先排序的01背包)
- Proud Merchants 3466 (01背包+排序+技巧)
- HDU 3466 Proud Merchants(排序的01背包)@
- HDU 3466 Proud Merchants(01背包+排序)
- HDU 3466 Proud Merchants (01背包排序问题)
- HDU 3466 Proud Merchants(01背包)
- hdu 3466 Proud Merchants(01背包)
- HDOJ 3466 Proud Merchants(01背包)
- hdu 3466 Proud Merchants (01背包)
- Proud Merchants(01背包)
- hdu 3466(排序+背包)Proud Merchants
- hdu 3466 Proud Merchants <背包+sort排序>
- hdu3466 Proud Merchants 01背包 排序 dp
- HDU3466 Proud Merchants 排序01背包
- Proud Merchants 。。。01背包
- HDOJ 题目3466 Proud Merchants(需排序的01背包)
- python中的实例方法、静态方法、类方法、类变量和实例变量
- HDU-1269 迷宫城堡 (强连通分量[Kosaraju])
- Poj1195(二维树状数组)
- 浅谈对工程管理器——make的理解
- 微信学习_01_开发环境搭建
- 【杭电oj】3466 - Proud Merchants(01背包,排序处理)
- 编写一个程序,自定义以为数组,删除一维数组中所有相同的数,使之只剩一个。数组中的数按由小到大顺序排列,并显示运行所用时间。
- LeetCode - 33. Search in Rotated Sorted Array
- hdu4405 概率期望
- linux:定时任务出现command not found
- uva10300 Ecological Premium
- 小米 懂二进制
- Android从启动到程序运行发生的事情
- WIFI网卡驱动移植