码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-07-21 23:29:23      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:os   for   c   dp   hdu   ip   

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背包

标签:os   for   c   dp   hdu   ip   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!