您的位置:首页 > 其它

hdu3466(01背包排序)

2017-07-31 22:20 204 查看
这道题外加了一个条件就是买价格为pi的物体时,剩余的钱不能小于qi,要做一些变动:排序

按照qi-pi的差排序

为什么。。我还在想。。

#include <iostream>

#include <cstring>

#include <cstdio>

#include <vector>

#include <algorithm>

using namespace
std;

struct node

{

    int pi,qi,vi;

}a[505];

bool cmp(node a,node b)

{

    return a.qi-a.pi<b.qi-b.pi;

}

int dp[50005];

int main()

{

    int v,n;

    while(~scanf("%d %d",&n,&v))

    {

        for(int i=0;i<n;i++)

            scanf("%d %d %d",&a[i].pi,&a[i].qi,&a[i].vi);

        memset(dp,0,sizeof(dp));

        sort(a,a+n,cmp);

        for(int i=0;i<n;i++)

        {

            for(int j=v;j>=a[i].qi;j--)

                dp[j]=max(dp[j],dp[j-a[i].pi]+a[i].vi);

        }

        printf("%d\n",dp[v]);

    }

    return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: