hdu 3466 Proud Merchants(DP)
来源:互联网 发布:服务器交换机端口号 编辑:程序博客网 时间:2024/05/21 20:30
Proud Merchants
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)
Problem DescriptionRecently, 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?
InputThere 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.
OutputFor each test case, output one integer, indicating maximum value iSea could get.
Sample Input2 1010 15 105 10 53 105 10 53 5 62 7 3
题意:有一个人到一座城买东西,他共有M钱,但是商人每次只与他交换一个项目价值为V,需要花费P,且若商人的钱少于Q,则不与交换,求出商人用M钱所能换的的最大价值。
思路:比较特殊的DP,要先按照q-p由小到大排序。因为比如 7,12,10和7,6,10,一定是先交换7,12,10;
#include <iostream>#include <cstring>#include <cstdio>#include<cmath>#include <algorithm>using namespace std; struct point{ int p; int q; int v; bool operator < (const point b)const { return q-p<b.q-b.p; } };int main(){ point s[510]; int n,m,i,j; int pi,qi,vi,t; int dp[5050]; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { scanf("%d%d%d",&s[i].p,&s[i].q,&s[i].v); } sort(s,s+n); for(i=0;i<n;i++) { qi=s[i].q; pi=s[i].p; vi=s[i].v; for(t=m;t>=qi;t--) dp[t]=max(dp[t],dp[t-pi]+vi); } cout<<dp[m]<<endl; } return 0;}
Proud Merchants
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)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
题意:有一个人到一座城买东西,他共有M钱,但是商人每次只与他交换一个项目价值为V,需要花费P,且若商人的钱少于Q,则不与交换,求出商人用M钱所能换的的最大价值。
思路:比较特殊的DP,要先按照q-p由小到大排序。因为比如 7,12,10和7,6,10,一定是先交换7,12,10;
#include <iostream>#include <cstring>#include <cstdio>#include<cmath>#include <algorithm>using namespace std; struct point{ int p; int q; int v; bool operator < (const point b)const { return q-p<b.q-b.p; } };int main(){ point s[510]; int n,m,i,j; int pi,qi,vi,t; int dp[5050]; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) { scanf("%d%d%d",&s[i].p,&s[i].q,&s[i].v); } sort(s,s+n); for(i=0;i<n;i++) { qi=s[i].q; pi=s[i].p; vi=s[i].v; for(t=m;t>=qi;t--) dp[t]=max(dp[t],dp[t-pi]+vi); } cout<<dp[m]<<endl; } return 0;}
- hdu 3466 Proud Merchants(DP)
- hdu 3466 Proud Merchants(DP)
- hdu 3466 Proud Merchants(贪心+DP)
- hdu 3466 Proud Merchants (排序的dp)
- HDU 3466 Proud Merchants【01dp】
- HDU 3466 Proud Merchants 贪心+dp
- hdu 3466 Proud Merchants
- HDU 3466 Proud Merchants
- hdu 3466 Proud Merchants
- hdu 3466 Proud Merchants
- hdu 3466 Proud Merchants
- HDU-3466-Proud Merchants
- HDU 3466 Proud Merchants
- hdu 3466 Proud Merchants
- HDU 3466 Proud Merchants
- HDU 3466 Proud Merchants
- hdu 3466 Proud Merchants
- HDU 3466 Proud Merchants
- 求栈的最小元素
- 2013 多校第九场 hdu 4686 Arc of Dream(矩阵乘法或者直接推公式)
- ubuntu安装中文输入法
- EditText 总结
- IDA 断点设置里,地址前得加上0x
- hdu 3466 Proud Merchants(DP)
- va_list可变参数原理及vsprintf函数
- Codility上的问题 (16) Omicron 2012
- ios 制作 framework小结
- opencv帮我看看怎么这样呢,轮廓无法读出来
- 职员的四个境界
- 两列宽高自适应
- Int double 总结
- poj2425(博弈SG函数)