考虑二进制下数位 d p dp dp,令 > k >k >k表示满足条件,计算满足条件的数个数及和
记录 f [ N ] [ 0 / 1 ] [ 0 / 1 ] [ 0 / 1 ] f[N][0/1][0/1][0/1] f[N][0/1][0/1][0/1]表示 f [ s t e p ] [ 顶 着 n ] [ 顶 着 m ] [ > k ] f[step][顶着n][顶着m][>k] f[step][顶着n][顶着m][>k]的和,记同样的 g g g表示个数
d f s ( s t e p , 顶 着 n 上 限 , 顶 着 m 上 限 , 顶 着 k 下 限 ) dfs(step,顶着n上限,顶着m上限,顶着k下限) dfs(step,顶着n上限,顶着m上限,顶着k下限)
最大费用流,跑一次判一次费用是否大于0
S A M SAM SAM模板题
错排问题,选 m m m个正确,剩下 n − m n-m n−m个错排
a n s = C n m ⋅ f ( n − m ) ans=C_n^m\cdot f(n-m) ans=Cnm⋅f(n−m)
f ( n ) = ( n − 1 ) ⋅ ( f ( n − 1 ) + f ( n − 2 ) ) f(n) = (n-1)\cdot(f(n-1)+f(n-2)) f(n)=(n−1)⋅(f(n−1)+f(n−2))
预处理阶乘,阶乘逆元, f f f即可
h a s h hash hash+点分治
预处理前缀串和后缀串的 h a s h hash hash
例子: n = 7 , s = a b c n=7,s=abc n=7,s=abc
p r e = a , a b , a b c , a b c a , a b c a b , a b c a b c , a b c a b c a pre=a,ab,abc,abca,abcab,abcabc,abcabca pre=a,ab,abc,abca,abcab,abcabc,abcabca
s u f = c , b c , a b c , c a b c , b c a b c , a b c a b c , c a b c a b c suf = c,bc,abc,cabc,bcabc,abcabc,cabcabc suf=c,bc,abc,cabc,bcabc,abcabc,cabcabc
然后点分治,桶记录每个(长度 m o d l e n ( s ) mod\ len(s) mod len(s)为关键字) p r e pre pre和 s u f suf suf出现的次数
集合划分网络流,每个单词拆点
对于句子,向每个单词(正)连 i n f inf inf边;单词(反)向句子连 i n f inf inf边
a n s ans ans=最小割+回文单词个数
带权并查集
考虑连动的传递性
然后每次合并