其实就是把一堆物品分块
分成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]]; }