动态dp

一类支持修改;区间询问的 dp

  • 不带修:

    CF1661E:题解

    具体就是将所有询问离线下来,用一个类似于线段树的结构维护,将每个询问挂到正好包含此询问且 m i d mid mid 在询问中间的节点上

    这种方法代码非常简单,时间复杂度是 O ( n log ⁡ n + q × t ) O(n\log{n}+q\times t) O(nlogn+q×t) t t t 表示合并信息的时间复杂度

  • 带修:

    CF1609E:

    非常基础,对于原串所有子序列都没有出现过给定字符串这样的问题直接套广义矩乘就好了

    CF573D:题解

    很有意思,贪心转化成第 i i i 个位置只能选 [ i − 2 , i + 2 ] [i-2,i+2] [i2,i+2] 之间的物品就可以动态 dp 了。确定一个题是动态 dp 的时候就可以直接往这种方面想

    lg4719:

    树上的问题

    直接考虑树剖,然后每一个重链维护上面的矩阵即可

    注意树剖的矩阵乘法是从根到叶子节点的,乘的时候需要反过来

    这道题的修改非常有意思

你可能感兴趣的:(c++)