- 想知道如何实现双关键字dp吗click it!
- 三进制状压可以用四进制来写,从而用位运算方便计算
- 枚举一个二进制数i的真子集可以通过如下代码进行:
for(int j=(i-1)&i;j;j=(j-1)&i);
- $\sum_{x=0}^{n} C_n^x *2^x $可以用来表示对于每个n位2进制数,枚举其所有子集的总枚举量,用二项式定理可知结果为\(3^n\),可以用来算状压dp复杂度
- 树形背包的上下界一定要想清楚,要卡的严一点,具体复杂度不会证,但只要卡到最小就是对的,一般来说写成刷表更容易一些
- 树上背包复杂度利用上下界优化,可以优化到O(NM)或O(N^2),当然也有其他的优化方法,例如先序遍历优化,左儿子右兄弟表示法等复杂度分析
- 涉及时间的题目,考虑以时间为阶段DP
- 在涉及单调队列优化和斜率优化等优化时,往往刷表法不能进一步的优化,必须要换成填表法。
- 数位dp的init数组,记得在主函数中调用
- 初始化递推数组时,要注意收益为0和非法情况要区分开!!!P1280 尼克的任务
- 斜率优化时,用单调队列或单调栈维护凸包时,考虑新加入的点是否有可能横坐标相同,需要特判。维护下凸包时,保留下面的点,删除上面的点;维护上凸包时,保留上面的点,删除下面的点。
- 当对一个序列进行dp时,注意如果这个序列的dp顺序不影响答案,可以考虑按某种关系排序,使得序列具有某种性质,从而更方便转移[NOI2015] 寿司晚宴
- 状压dp的转移顺序,有时候要从二进制数中1的个数从少到多转移
- 状压dp的转移通常比较复杂,很多时候用刷表更容易实现
- 考虑对于决策集合是否满足某种性质,从而只有一个特殊点是最优的[JSOI2009]火星藏宝图
- 考虑数形结合,看是否能用单调队列维护 道路游戏