记忆化搜索:
-
记忆化
-
压缩 DP 状态(一些期望 dp 里会用)
-
剪枝
递推:保证前面的部分已经计算了
数位 dp
求 \([l,r]\) 之内满足某种限制的数的个数,该限制应该是与数位有关系的。
带不带前导0取决于是否对统计答案造成影响。
前缀和转化:只有上界
- 补充题:如果 lim=1 的时候前面都是与 r 相同的,这个时候是可以枚举转移的,如果 lim=0,那么我们知道前面已经确定的位数,就知道还有多少数可用,可以不确定出具体是什么数,只要乘上系数就可以了。
状压 dp
- 子集个数定理:对于 \(T\subseteq S\subseteq \{1,2,\dots,n\}\) ,不同的 \((S,T)\) 有 \(3^n\) 个
-
枚举子集:
先减 1,去掉最后一个 1,然后再把后面赋值成与 i 后面相同的
-
更加优秀的做法:一次加入一个元素,设 \(f[S]\) 是加入了 \(S\) 之后的最优情况,定义为 \((min\_group\_count,current\_rest\_V)\) ,在加入一个新的元素时,优先比较最小组数,然后比较当前最后一组剩余大小。
-
那个题可以卡过去,不过还是能够继续优化:我们可以一一确定每个格子,考虑到当前状态只有最靠下面的轮廓是有效的,状压这个轮廓线即可转移。
-
DP 套 DP:要存储最长公共子序列的情况,我们可以存储计算LCS的DP数组,注意到该数组差分为0/1,可以状压。
概率 dp
-
由于只求 k,在第一个人开枪之后可以看成重新编号了,我们知道这种循环的概率,这样计算可以直接计算出数列的极限。我们设 f[n][k] 表示 n 个人,要求编号为 k 的活着的概率。这里有环(基环树、树等也可能使用,参见随机游走),考虑设一个主元,然后用该主元表示其他元。
-
可以使用无穷级数求和证明
证法2:令该期望为 \(x\) ,则有 \(x=p\times x+(1-p)\times(1+x)\) ,解得 \(x=1/p\) 。