轻松的音乐
设 \(f_{i,j}\) 表示前 \(i\) 个位置处理了长度至少为 \(j\) 的前缀,这里处理包括覆盖和放弃。根据常识不难发现 \(j\in[i-p_i,i+p_i]\) 时才是有效的
首先继承 \(i-1\) 的状态
如果将 \(i\) 向后覆盖那么依赖于 \(dp_{i-1,i}\) 这个状态,转移到 \(dp_{i,i+p_i}\)。
如果让 \(i\) 向前覆盖那么考虑枚举可以被覆盖到的点 \(j\),此时 \([j,i)\) 中的线段都是向右覆盖的,使用 \(dp_{i-1,j-1}\) 转移到第二维是 \(\max R[j,i)\) 状态即可
最后一种选择就是放弃覆盖,让 \(dp_{i,j-1}+a_j\) 转移至 \(dp_{i,j}\) 即可。
根据定义需要在每个 \(i\) 转移后做后缀和
论文题
设势能函数 \(\displaystyle\Phi(A)=\sum_{i=1}^{n}f(A_i)\) 其中 \(A\) 表示一个球的数量的状态,设 \(A_{t}\) 表示第 \(t\) 秒的状态。设 \(S=\sum a_i\)
设 \(\mathbb E(\Phi(A_{t+1})-\Phi(A_t)|A_0\dots A_t)=-1\) 此时做和式变换并最后用停时定理来计算答案 (\(\mathbb E(t)=\mathbb E(\Phi(A_0))-\Phi(A_t)=\sum f(a_i)-(f(S)-(n-1)f(0))\) )
在和式变换过程中使用 \(g(i)=f(i+1)-f(i)\)
答案表达式为 \(f(n)=f(0)+ng(0)-n(S-1)+\sum\limits_{j=0}^{n-1}\dfrac{(S-1)(S-n)}{S-j}\)
为了让 \(f(S)\) 为 \(0\) 可以带入 \(g(0)=m-1\) 那么剩下的全都暴力即可
最下生成树
二类边指输入的 \(m\) 条边,而一类边是指 \((0,i,a_i)\) 这样的边
第二类边是链的情况设 \(dp_{i,0/1}\) 表示前 \(i\) 个元素已经互相联通/和 \(0\) 连通,\(i\) 所在的连通块和 \(0\) 连通与否。这个 \(\rm DP\) 可以使用线段树维护动态 \(\rm DP\) 来实现
在第二类边是任意图时,可以构造一条 “等效链” 来实现。由于第二类边在修改操作中不会发生变化,在 \(\rm Kruskal\) 算法的流程中将每个连通块表示成一条链,合并连通块时将两条链任选首尾相接
剩下额工作和链的情况类似,都是在线段树上维护 \(M_{0/1,0/1}\) 表示区间左右端点是否和 \(0\) 连通即可,合并左右子区间时需保证左子区间右端点和右子区间左端点有一个和 \(0\) 连通,如果有其中之一不连通需要付出等效链上二类边的代价
一个可能的疑问时在线段树上合并左右区间时调用的二类边将 node[mid],node[mid+1]
连通,但是需要证明最后在 \(1\) 处得到的方案是连通。我现在只能牵强地归纳了两下来理解,不知道有没有更好的理解