基础 Dp

1.线性 dp

1.1 P1412 经营与开发

由于前面的操作只会对后面乘一个系数。
所以这题需要倒着 dp。
\(f(i) = \max (f(i+1)\cdot k+v,f(i+1))\)
\(k,v\) 分别为损耗,利益。

2.区间 dp

状态通常为一个区间。

2.1 P1880 [NOI1995] 石子合并

对于区间 \([i,j]\) ,枚举断点 \(k\),并用 \([i,k],[k,j]\) 更新。
注意这题要断环成链。

2.2 P1220 关路灯

我们发现已经关了的路灯一定是一个连续的区间。
\(f(i,j,0/1)\) 表示已经关了 \(i\sim j\) 的灯,处于左边或右边。
转移迎刃而解。

3.树形 dp

3.1 P1352 没有上司的舞会

\(f(u,0/1)\) 表示 \(u\) 选/不选,其子树最大权。
\(f(u,0)=\sum\max(f(v,0),f(v,1))\)
\(f(u,1)=\sum f(v,0)\)
其中 \(v\)\(u\) 儿子。

3.2 P2014 [CTSC1997] 选课

\(f(u,k)\) 表示 \(u\) 子树选了 \(k\) 门课。
左右子树像背包那样合并。

3.3 P3478 [POI2008] STA-Station

换根 dp,就是把父节点的信息转移到儿子上。
\(f(v)=f(u)-siz(v)\cdot dis(u,v)+(n-siz(v))\cdot dis(u,v)\).

4.状压 dp

考虑把状态压缩成整数。

4.1 P1896 [SCOI2005] 互不侵犯

\(f(i,S)\) 为前 \(i\) 行,第 \(i\) 行是 \(S\) 为状态的方案数。
\(f(i,S)=\sum f(i-1,T)\)\(S\)\(T\) 互不侵犯。

5.数位 dp

一般采用记忆化搜索。

5.1 P2657 [SCOI2009] windy 数

考虑设计状态 \(f(p,last,zero,limit)\)
表示还有 \(p\) 为要填,上一位是 \(last\)\(zero\) 为是否全为前导零,\(limit\) 表示是否有最高位限制。
记忆化搜索。
答案是 \(R\) 的答案减去 \(L-1\) 的答案。

posted @ 2023-05-21 19:02  s1monG  阅读(27)  评论(1)    收藏  举报