mltang

博客园 首页 新随笔 联系 订阅 管理

其实就是把一堆物品分块

分成1,2,4,8.。。。。。。

这样就可以组合成任意一个数

for(j=1;j<=num[i];j<<=1)        //num[i]数量    val[i]价值    
{
    for(k=m;k>=j*val[i];--k)
    {
        dp[k] = dp[k]||dp[k-val[i]*j];
    }
    num[i]-=j;
}
if(num[i]>0)
{
    for(k=m;k>=val[i]*num[i];--k)
        dp[k]=dp[k]||dp[k-val[i]*num[i]];
}

 

posted on 2018-04-13 00:02  mltang  阅读(176)  评论(0编辑  收藏  举报