动态规划算法总结
一些心得
1.对于一些不好处理,不好得到的值,可以将其直接存入状态中枚举,加一维。
2.dp并不一定每一个转移都是最优的,只要最优状态一定在dp数组中存在,且一定会参与转移就行了。
状压dp
1.枚举 k 的子集,有一个技巧是
for(int p=k;p!=0;p=(p-1)&x){
......
}
证明:显然,每次-1的话会使他当前最后一个1所在的位置变成0,并使后面的都变成1。(....100 \(\rightarrow\) ....011)。去一遍与之后,所有k中为0的位置又会重新变成0。后面哪些为1的位置又会重新变成1。所以这样就能枚举到所有的子集且不会重复。

浙公网安备 33010602011771号