您的位置:首页 > 其它

hdu 3449 Consumer 有依赖关系的背包

2018-02-11 20:00 316 查看
先默认把所有的主件都买上,之后01附件的。最后比较不买主件的额即可

#include<stdio.h>  
#include<string.h>  
int dp[11000][11000];//前i个箱子花费j元所得的价值  
int n,t,box,num;   
int main ()  
{  
    while(cin>>n>>t)  
    {  
        memset(dp,-1,sizeof(dp));   //有依赖关系,要赋初值-1  
        memset(dp[0],0,sizeof(dp[0]));  
        for(i=1;i<=n;i++)  
        {  
            cin>>box>>num;
            for(k=box;k<=t;k++) //我要买这个箱子,先把这个箱子给买了
                dp[i][k]=dp[i-1][k-box];    
            for(j=0;j<num;j++)     //之后对于当前箱子
                int c,w;  
                cin>>c>>w;  
                for(k=t;k>=c;k--)   //01   
                {  
                    if(dp[i][k-c]!=-1) //买了箱子
                        dp[i][k]=max(dp[i][k],dp[i][k-c]+w); 
                }  
            }  
            for(j=0;j<=t;j++)  
            {               // 之前都是算作买箱子,这次是不买箱子  
                dp[i][j]=max(dp[i-1][j],dp[i][j]); 
            }  
        }  
        cout<<dp
[t]<<endl;  
    }  
    return 0;  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: