首页 > 其他 > 详细

多重背包转换成完全背包和01背包

时间:2014-07-21 23:28:53      阅读:434      评论:0      收藏:0      [点我收藏+]
void CompletePack(int cost,int weight)   多重背包
{  
    for(int i=cost;i<=m;i++)  
    dp[i]=max(dp[i],dp[i-cost]+weight);  
}  
void ZeroOnePack(int cost,int weight)    01背包
{  
    for(int i=m;i>=cost;i--)  
    dp[i]=max(dp[i],dp[i-cost]+weight);  
}  
void MultiplyPack(int cost,int weight,int amount)   完全背包
{  
    if(cost*amount>=m)  
    CompletePack(cost,weight);  
    else  
    {  
    int k=1;  
    while(k<amount)  
    {  
        ZeroOnePack(k*cost,k*weight);  
        amount-=k;  
        k<<=1;  
    }  
    ZeroOnePack(amount*cost,amount*weight);  
    }  


详情看
HDU 2844 Coins (动规)

多重背包转换成完全背包和01背包,布布扣,bubuko.com

多重背包转换成完全背包和01背包

原文:http://blog.csdn.net/qq2256420822/article/details/38024611

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!