【Trick】【DP】

  • 想知道如何实现双关键字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]火星藏宝图
  • 考虑数形结合,看是否能用单调队列维护 道路游戏
posted @ 2021-11-14 13:26  glq_C  阅读(93)  评论(1)    收藏  举报