您的位置:首页 > 其它

HDU 3466 Proud Merchants 条件限制01背包

2014-08-04 21:43 363 查看
比如A:p1 q1, B:p2 q2,

然后,假设单独买A或者B的话,都是可以买到的。

这时,若先买A,则你至少需要p1+q2的钱;

若先买B,则至少需要p2+q1的钱。那肯定是花最少的钱咯,

所以如果先买A再买B,那么p1+q2<p2+q1,转换一下,

就是q1-p1>q2-p2,也就是说qi-pi大的先买。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include<iostream>
#include <algorithm>
using namespace std;
#define MAXN 100*111
#include <queue>
#include <vector>
#define IN freopen("in.txt","r",stdin);
int dp[6000];
struct node
{
int p,q,v;
}a[555];
int n,m;
bool cmp(node a,node b)
{return a.q-a.p<b.q-b.p;}
int main()
{
// IN;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(dp,0,sizeof(dp));
for(int i=0; i<n; i++)
scanf("%d%d%d",&a[i].p,&a[i].q,&a[i].v);
sort(a,a+n,cmp);
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);
printf("%d\n",dp[m]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: