hdu 3466 Proud Merchants

来源:互联网 发布:mac python numpy安装 编辑:程序博客网 时间:2024/06/05 14:11

http://acm.hdu.edu.cn/showproblem.php?pid=3466




在01背包的基础上加了个拿物品时至少拥有一定财富才可以拿的限制,那么只要把样例模拟一下就知道需要对dp[i]的更新要尽量从小更新,就是能早一点更新dp[1]就早更新,即拿东西的时候,从限制较大的东西开始拿,但是更新dp数组的数是反过来,限制越小的东西越早用来更新。




#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;struct node {int w,q,v;}ite[11111];int dp[11111];int n;int m;bool cp1(const node &x,const node &y){    return x.q-x.w<y.q-y.w;}int main(){   while(scanf("%d%d",&n,&m)!=EOF){    memset(dp,0,sizeof(dp));    int i,j;    for(i=0;i<n;i++)    {    cin>>ite[i].w>>ite[i].q>>ite[i].v;}sort(ite,ite+n,cp1);for(i=0;i<n;i++){for(j=m;j>=ite[i].q&&j>=ite[i].w;j--){dp[j]=max(dp[j],dp[j-ite[i].w]+ite[i].v);}}cout<<dp[m]<<endl;     }      return 0;}


原创粉丝点击