多重背包
f
[
i
]
[
j
]
=
m
a
x
(
f
[
i
−
1
]
[
j
−
k
∗
v
]
)
f[i][j]=max(f[i-1][j-k*v])
f[i][j]=max(f[i−1][j−k∗v])
第二维在mod v意义下形成v条转移链,把这些链拿出来分别转移,每个点可以被上一层的一段区间转移过来
整数拆分问题
问题:一个正整数化成一个无序的正整数序列的和,问有多少种不同序列
f
[
i
]
[
j
]
f[i][j]
f[i][j] i个数拼出j的方案数,两种转移:
新加一个1:->f[i+1][j+1]
所有数加1:->f[i][j+i]
复杂度O(n^2)
考虑优化:
性质:大于
n
\sqrt{n}
n的数不超过
n
\sqrt{n}
n个
这样第一个转移改为:->f[i+1][j+
n
\sqrt{n}
n]
第二个不变
这样第一维只有
n
\sqrt{n}
n
小于
n
\sqrt{n}
n的部分完全背包,只需要枚举
n
\sqrt{n}
n个数
之后将两部分合起来
O
(
n
)
O(n)
O(n)
树形dp
一般有关size的dp的复杂度是
O
(
n
2
)
O(n^2)
O(n2)
每对点对只在lca处贡献
概率与期望
·加法原理
·乘法原理
·期望的线性性
·若干事情都发生的概率:乘起来
·若干事情至少一个发生的概率:全集减去不合法的
概率充电器
f
[
u
]
f[u]
f[u]只考虑u的子树,u不带电的概率
两遍dfs,树形dp
决策单调性优化
如果
f
[
i
]
f[i]
f[i]的决策点是p[i],那么f[i]由f[p[i]]转移过来。
形如f[i]=min(f[j]+w[j,i]),如果满足决策单调性,那么必须满足四边形不等式
每更新一个确定的f,通过二分确定它能决策的待定后缀。具体地,用一个队列维护决策点,每次插入,从队尾开始比较,能完全替换就弹出,否则二分。
wqs二分(凸优化)
函数f斜率单调,知道极值,可以很快求出特值
SIT
考虑先dp联通情况,空位插板进去
经典题
问题:n个点有编号连通图个数
考虑算不合法的,每次转移枚举1号点所在的联通块大小。
队员分组
找两个不相交团,建补图找两个独立集,二分图染色,背包