HDU 3466 Proud Merchants

原创 2016年08月30日 17:40:08

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? 

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. 

Output

For each test case, output one integer, indicating maximum value iSea could get. 

Sample Input

2 10
10 15 10
5 10 5
3 10
5 10 5
3 5 6
2 7 3

Sample Output

5

11

背包问题,多了一个限制,排序即可。

一开始考虑按照Qi从小到大排序,wa了,后来改为Qi-Pi就ok了

因为根据Qi-Pi排序,可以保证从小到大都是之前已经算过的。

#include<set>
#include<map>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<bitset>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define rep(i,j,k) for (int i = j; i <= k; i++)
#define per(i,j,k) for (int i = j; i >= k; i--)
#define loop(i,j,k) for (int i = j;i != -1; i = k[i])
#define lson x << 1, l, mid
#define rson x << 1 | 1, mid + 1, r
#define fi first
#define se second
#define mp(i,j) make_pair(i,j)
#define pii pair<string,string>
using namespace std;
typedef long long LL;
const int low(int x) { return x&-x; }
const double eps = 1e-8;
const int INF = 0x7FFFFFFF;
const int mod = 1e9 + 7;
const int N = 1e5 + 10;
const int read()
{
	char ch = getchar();
	while (ch<'0' || ch>'9') ch = getchar();
	int x = ch - '0';
	while ((ch = getchar()) >= '0'&&ch <= '9') x = x * 10 + ch - '0';
	return x;
}
int T, n, m, f[N];

struct point
{
	int x, y, z;
	void read() { scanf("%d%d%d", &x, &y, &z); }
	bool operator<(const point&a)const
	{
		return y - x < a.y - a.x;
	}
}a[N];

int main()
{
	//T = read();
	while (scanf("%d%d", &n, &m) != EOF)
	{
		rep(i, 1, n) a[i].read();
		sort(a + 1, a + n + 1);
		rep(i, 0, m) f[i] = 0;
		rep(i, 1, n) per(j, m, a[i].y) 
			f[j] = max(f[j], f[j - a[i].x] + a[i].z);
		printf("%d\n", f[m]);
	} 
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Proud Merchants HDU - 3466 (思路题--有排序的01背包)

Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerfu...

HDU 3466 Proud Merchants(DP:01背包+贪心)

HDU 3466 Proud Merchants(DP:01背包+贪心) 题意:同样有nKind个物品,每个物品有一个weighe[i]和value[i],但是如果你当前余额 分析:首先对于任意两...

hdu 3466 Proud Merchants(01 背包)

Proud Merchants Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub...

HDU3466 Proud Merchants

01背包变种

hdu 3466 Proud Merchants

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 题目的大意是:有n件物品,每个物品有个费用p,但要得到这件物品,你至少拥有的钱为q,每个物品也...

HDU 3466 Proud Merchants(01背包/按limit-price从小到大排序)

题目链接: HDU 3466 Proud Merchants 题意: 有nn个商品和预算mm元。每个商品有个价格priceprice,购买限制limitlimit和价值valval,必须在手中剩...
  • Ramay7
  • Ramay7
  • 2016年03月30日 16:24
  • 245

Hdu3466 Proud Merchants

[题目连接~点我点我点我](http://acm.hdu.edu.cn/showproblem.php?pid=3466) 01背包变形,每做一次都是一次提高,这个题很有意思。这题因为涉及到q,所以...

HDU3466 Proud Merchants (01背包变形)

题意:n件物品,总钱数为m,每件物品都有p(买这件物品的花费),q(当钱数大于q时才可以买这件物品),v(买这件物品获得的价值),求能获得的最大价值      比赛时看到题想到是DP,也想到01背...
  • Gengman
  • Gengman
  • 2017年03月27日 21:52
  • 390

HDU3466 Proud Merchants(贪心+01背包)

题目: Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Ja...

HDU Proud Merchants 3466 0-1背包变形

Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others...
  • LZK1997
  • LZK1997
  • 2017年04月19日 21:49
  • 242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 3466 Proud Merchants
举报原因:
原因补充:

(最多只允许输入30个字)