一.
1<<i :是将1左移i位,即第i位为1,其余位为0;
i<<1:左移赋值运算。(左移一位相当于对该数乘2,左移n位就相当于乘n个2。) 变量i 左移1位, 结果仍然保存到变量i。例如:i=101001
执行:
i<<=1
之后i=1010010 ;
二.
0-1背包:物品件数为1件;
多重背包:物品件数为有限件数;
完全背包:物品的件数为无限件数;
完全背包问题要沿着v的正方向进行枚举
二维代码如下:
//0-1背包:
void k(){
for (int i=1;i<=n;i++){
for (int j=v;j>=w[i];j--){
dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
}
}
}
//完全背包
for(int i=1;i<=n;i++){
for(int j=w[i];j<=m;j++){
dp[j]=max(dp[j],dp[j-w[i]]+c[i]);
}
}
一维状态: