随笔分类 - 动态规划
摘要:只会 80pts. 最裸的暴力(40pts) 令 $f[i][j]$ 表示当前 DP 到 $i$,划分成了 $j$ 段的最小值. 时间复杂度 $O(n^2)$ 一点优化(60 ~ 80pts) 有几个测点 $a[i]$ 很小,那么可以直接开一个桶 $s[i][j]$ 表示前缀异或和为 $i$,且划分
阅读全文
摘要:感觉数学期望这里始终都没太学明白. 期望在任何时候都具有线性性,即 $E(a+b)=E(a)+E(b)$,这个式子任何时候都成立. 先考虑求 $x$,$x^2$. 令 $x1[i]$ 表示 $i$ 为 $1$ 向前的极长 $1$ 的期望长度,$x2[i],x3[i]$ 为 $x^2,x^3$ 的期望
阅读全文
摘要:打表发现一个排列满足要求,当且仅当这个排列以被拆成两个 LIS(其中一个可以为空)考虑状压 DP:$f[S][i][0/1]$ 表示加进去数集 $S$,第二个 LIS 的最大值为 $i$,是否顶上界.我们拆分 $LIS$ 的方式是贪心地将较大的值分给第一个,剩下的分给第二个. 这个时间复杂度大概是
阅读全文
摘要:首先,肯定没有不合法情况(每条边的权值都赋值为 $1$ 就一定合法) 然后对于一条边 $(x,y)$ 来说,只可能有 3 种取值. 1. 取 $a[x]$ 2. 取 $a[y]$ 3. 取 $m$ 然后转化成这一步后就可以进行树形 DP 了. 令 $f[x][0],f[x][1]$ 分别表示以 $x
阅读全文
摘要:没有测试数据,但是和正解对拍了 400 多组数据都过了. 手画一下发现每个数如果变化的话只有 3 种情况:$-1,0,1$. 感性理解的话一个数变小的话对前面更优,对后面更劣. 但是我们发现不可能存在一个数使得该数变小后会导致后面的数也变小. 这是因为如果该数变小的话说明该数和前缀最小值已经构成 $
阅读全文
摘要:神仙容斥+DP可还行. code: #include <cstdio> #include <cmath> #include <vector> #include <cstring> #include <algorithm> #define N 1007 #define ll long long #de
阅读全文
摘要:运用到了 NOI2019 机器人那道题的技巧. 考虑对区间进行离散化,然后设当前枚举到的两个端点为 $[l,r]$. 先处理 $[l,r)$,会遇到 $\sum_{i=1}^{n} \binom{len}{i} \binom{k}{i}$ 这个式子. 这个式子可以直接 $O(1)$ 组合数算,但是我
阅读全文
摘要:NOI2019 两道插值可还行. 一个数不可能向右移动到超过后缀最大值的位置,也不可能向前移到前缀最大值之前的位置. 那么就考虑基于最大值的分治(DP) 令 $f[l][r][x]$ 表示当前区间为 $[l,r]$ 最大值为 $x$ 的方案数. 然后转移的话枚举 $k$ 为最大值出现的位置(有多个的
阅读全文
摘要:概率DP+记忆化搜索. 直接记忆化搜索感觉比较显然+简单. 直接设状态 $f[x][a][b][c]$ 表示还剩 $x$ 轮,当前牌的状态为 $(a,b,c)$ 还期望造成的伤害. 转移的话就是倒着转移:$f[x][a][b][c] \leftarrow f[x-1][.....]$. 然后边界的话
阅读全文
摘要:有一个非常显然的 DP: $f_{i,j,0/1}$ 表示当前 $DP$ 到 $i$,选了 $j$ 个 A,当前位置选的是 A/B 是否可行. 状态数为 $O(n^2)$,转移为 $O(1)$,时间复杂度为 $O(n^2)$. 这个时候就要动用人类智慧:打表. 打表后发现当 $i,0/1$ 固定的时
阅读全文
摘要:裸做的话设一个 $p[i][j]$ 表示两个堆分别抽走 $i,j$ 个的概率. 转移的话就枚举当前是第几个,然后再枚举左/右面由下向上第几个贡献. 不在模意义下做,开 double 打表发现无论怎样洗牌,一次函数还是一次函数,二次函数还是二次函数. 那么我们只需暴力维护出牌的前 3 项,然后后面的项
阅读全文
摘要:比较好的一道题 DP 题. 令 $f[i][j]$ 表示覆盖前 $i$ 个基站且 $i$ 位置上维修了基站的最小代价. 注意:上面设的状态是不考虑 $[i+1,n]$ 的. 转移的话 $f[i][j] \leftarrow f[k][j-1]+calc(j-1,i)$. 其中 $calc(i,j)$
阅读全文
摘要:题意:给定一个字符串,求有多少个子序列满足该子序列长度为 $7$,且位置所对应字母在子序列中排名为 3652415. 观察发现如果枚举 $3,5,2$ 上的字母的话其他字母插入方式只有 1 种,即不会引起冲突. 然后就令 $f[x][i]$ 表示 DP 到 $i$ 位置,匹配了子序列第 $x$ 位置
阅读全文
摘要:题意:求有多少种排列满足 $i$ 之前第一个小于 $i$ 的位置是 $q[i]$. 如果没有 $q[i]$ 的限制,答案就是全排列,然后 $q[i]$ 会限制一些元素之间的大小关系. 直接做的话没办法方便地求出元素之间的大小关系. 不妨思考单调栈的过程:如果遇到前缀最小值的话肯定会将栈清空. 那么也
阅读全文
摘要:假如说每次只能跳一步,一共跳 $i$ 步到达 $(i,x)$ 的方案数是好求的: $f[i][j]=\sum_{k=1}^{n} f[i-1][k] \times w(k,j)$. 时间复杂度为 $O(Ln^2)$. $ans_{t}=\sum_{i=0}^{L} f_{L,y} \times \b
阅读全文
摘要:本来以为这道题会非常难调,但是没想到调了不到 5 分钟就 A 了. 由于基于多项式的运算都可以方便地进行封装,所以细节就不是很多(或者说几乎没有细节) 题意:给定一棵树,每个点有点权,求对于所有大小为 $m$ 的独立集的点权之积的和. 数据范围:$n,m \leqslant 8 \times 10^
阅读全文
摘要:不妨枚举哪些位置和睦,然后计算其他位置都不和睦的方案数. 令 $f[i]$ 表示 $i$ 对情侣都不和睦的方案数. 然后 $f[i]$ 的转移和错位排列比较相似,即让情侣 $(i,i')$ 与 $(x,y)$ 合并或者 $(x,x')$ 合并. 前者对应 $f[i-2] \times 2 \time
阅读全文
摘要:令 $f[S]$ 表示所选的排列可以生成出 $S$ 的最大独立集且点集 $S$ 全部在序列中的方案数. 那么我们选一个没有被覆盖的点 $j$,令 $sta[j]$ 表示 $j$ 及 $j$ 覆盖的点集. 那么有 $f[S|sta[j]] \leftarrow f[S] \times A(n-|S|-
阅读全文
摘要:对于 $x,y$ 如果 $x$ 在 $y$ 的左面那么 $x \rightarrow y$ 的贡献是 $pos[y]-pos[x]$ $y \rightarrow x$ 的贡献是 $pos[x] \times k+pos[y] \times k.$ 令 $f[S]$ 表示集合 $S$ 在序列开头,且
阅读全文
摘要:求:有多少种序列满足 $a[i] \subseteq [1,D]$ 且 $m \leqslant \sum_{i=1}^{D} \frac{cnt[i]}{2}$裸做的话就是一个背包:$f[i][j]$ 表示前 $i$ 个数匹配了 $j$ 对的方案数,然后由于没有匹配的肯定是单个出现,所以转移的话比
阅读全文

浙公网安备 33010602011771号