动态规划题单做题日志
p.s. 今天观察队友发现 , 队友在比赛的时候可以长时间保持有发散性的思考 , 这点应该注意 !
-
不考虑容斥的做法 , 从暴力起手 .
设 \(dp_{i,j,0/1}\) , 代表进行到第 \(i\) 位 , 这个位置的值是 \(0/1\) , 上一个与之不同的位置在 \(j\) 的方案数 .
朴素的进行转移 , 用双指针将非法的区间归零即可 .
目前的时间复杂度是 \(O(k^2)\) 的 , 套路地考虑离散化 .
先抛去细节 , 考虑状态的变化 , 设 \(dp_{i,j,0/1}\) 代表进行到第 \(i\) 个关键点 , 上一个与之不同的位置在 \(lsh_{j-1}+1,lsh_{j}\) . 其中 \(lsh\) 是离散化映射数组 .
特别的 , \(dp_{i,i,0/1}\) 则代表在 \(lsh_{i-1}+1,lsh_{i}-1\) 不同.
这样的话直接转移就可以做到 \(O((n+m)^2)\) .
最重要的是如何选取关键点 , 才能在删除非法区间时保留信息 .
首先 \(0,k\) 是肯定要放的 .
考虑删除的过程 , 删除 \(j<l\) 的所有状态 , 但是考虑到 \(lsh_{j-1}+1,lsh_{j}\) 这里的设计 , 存在一种情况 ,不同的是 \(j\) 之前的数而不是 \(j\) 本身 , 所以 \(lsh_j -1\) 也应该加入关键点 , 参与离散化 .
现在最不熟悉的工作已经完成了 . 考虑优化 .
先把动态规划方程搬上来 ,
dp[0][i + 1][j] = A(dp[0][i + 1][j], dp[0][i][j]); dp[1][i + 1][j] = A(dp[1][i + 1][j], dp[1][i][j]); dp[0][i + 1][i] = A(dp[0][i + 1][i], dp[1][i][j]); dp[1][i + 1][i] = A(dp[1][i + 1][i], dp[0][i][j]); dp[0][i + 1][i + 1] = A(dp[0][i + 1][i + 1], M(A(P(2, Num[i + 1] - Num[i] - 1), S(1ll)), dp[0][i][j])); dp[0][i + 1][i + 1] = A(dp[0][i + 1][i + 1], M(A(P(2, Num[i + 1] - Num[i] - 1), S(1ll)), dp[1][i][j])); dp[1][i + 1][i + 1] = A(dp[1][i + 1][i + 1], M(A(P(2, Num[i + 1] - Num[i] - 1), S(1ll)), dp[0][i][j])); dp[1][i + 1][i + 1] = A(dp[1][i + 1][i + 1], M(A(P(2, Num[i + 1] - Num[i] - 1), S(1ll)), dp[1][i][j]));其实不难发现后六条都是一个全局和就可以搞定的事 .
-
这道题是
Dp套Dp的入门题目 , 首先是自动机惯常套路 设 \(dp_{i,j}\) 为第 \(i\) 个阶段 , 在自动机第 \(j\) 个节点的方案数 . 问题是怎么设计这个自动机.套的那一层 \(Dp\) 就是自动机 , 令求 \(LCS\) 的 \(Dp\) 数组本身的差异性作为自动机的节点 , 用 \(Hash\) 代表节点 .
暴力转移即可 .
-
最重要的点在于如何分类讨论降低状态数 , 而且必须得套路化使用爆搜确定原 dp 数组状态数 .
并且一个局面可能有多重选择 , 如果 g_j,k 中的任何一个数不同都是新的状态 , 即 数组本身的差异性作为自动机的节点 ; 是 dp 套 dp 的关键 .
-
首先是要读懂题面 , 然后考虑区间动态规划 .
考虑哪些中间状态是有效的 , 比如说整个序列都被一对括号包围 , 他就可能从
**(),()**(),()**转移考虑如何不算重 , 经典的套路是保持最后一段的特殊性 , 比如说最后一段的转移必须是
*****,(.....). 还算基础 -
设
dp[i][j]为 在子树i中建立了j个伐木场 , 子树内贡献最少的值 .发现不好计算 , 于是维护多一维信息 , 代表离
i最近的祖先 . 转移就是两个数组 , 是否在i这个节点放置伐木场 . -
即使是路径问题 , 也可以拆分成各个小贡献用动态规划解决 .
注意到简单路径只会走一次 , 不在简单路径上一定会走两次 , 设计状态分摊贡献 . 不妨以 \(1\) 为根 .
首先路径的端点肯定会走子树 , 路径上的点走与路径不交的子树 , 分别设计数组 .
所以有 \(f_i:\) 从 \(i\) 出发走子树回到 \(i\) 的最大值 , \(g_i:\) 从 \(i\) 的父节点出发不经过 \(i\) 的最大值 .
现在 \(lca\) 处的贡献较难统计 , 考虑换根动态规划之后通过减贡献求出答案 ;
\(h_i:\) 从 \(i\) 出发往任意方向走的最大值 , 分类讨论 \(u,v\) 的祖先关系即可 .
-
从每个点的期望次数求每个边的期望次数 .

浙公网安备 33010602011771号