hdu3466(排序+01背包)

链接:点击打开链接

题意:给出n个物品,和容量为m的背包,第i个物品的重量为p[i],价值为v[i],但必须当前背包的容量大于q[i]才可以放这个物品呢,求最大的价值

代码;

#include 
#include 
#include 
#include 
#include 
using namespace std;
struct node{
    int p,q,v;
    friend bool operator<(node a,node b){
        return a.q-a.ps[a].p时,为了使转移
            for(j=m;j>=max(s[i].q,s[i].p);j--)  //到下个物品时,转移的范围最大,因此下限小应该先放入
            dp[j]=max(dp[j],dp[j-s[i].p]+s[i].v);
        }                                       //背包,也就是按照s[a].q-s[a].p排序
        printf("%d\n",dp[m]);
    }
    return 0;
}

你可能感兴趣的:(动态规划,---------背包)