hdu 3466 Proud Merchants

来源:互联网 发布:心算除法的快速计算法 编辑:程序博客网 时间:2024/05/17 20:34

点击打开链接

题目大意:有n种物品,每个物品有三个属性p,q,v,  p代表价格,当你手中的钱少于q时,商品不卖,v代表商品价值,

01背包的升级版,这里要将商品按p-q大小进行升序排列,因为这样可以保证每次更新的状态值从小到大递增,前面更新过的状态不会影响后面更新的状态。

#include <iostream>#include <stdio.h>#include <cstring>#include <algorithm>using namespace std;struct note {int p,q,v;}a[600];int dp[6000];int n,m;bool cmp(note a,note b){return  a.q-a.p<b.q-b.p;}int main(){freopen("in.txt","r",stdin);    while(scanf("%d%d",&n,&m)!=EOF)    {    memset(a,0,sizeof(a));    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].p;j--)    {    if(j>=a[i].q)        dp[j]=max(dp[j],dp[j-a[i].p]+a[i].v);    }    printf("%d\n",dp[m]);    }}


0 0