ABC 乱做
选题:G 位置的计数,Ex
263Ex
261G \(\star\)
从 \(t\) 变到 \(s\) 更容易一些:一定是 \(t\) 被分成 \(|s|\) 个区间,第 \(i\) 个变成 \(s_i\)。设 \(f[l,r,c]\) 表示 \(t[l:r]\) 变成字符 \(c\) 的最小代价
显然是区间 DP。对于区间 \([l,r]\),枚举操作 \(a,c\),把 \(t[l:r]\) 变成 \(a\) 后就可以变成 \(c\)。设 \(g[i,j]\) 为把 \(t[l:i]\) 变成 \(a[1:j]\) 的最小代价,转移枚举 \(k\),把 \(t[k:i]\) 变成 \(a_j\)
注意 \(|a|=1\) 时转移实际上是最短路,floyd 预处理出 \(dis[i,j]\) 表示字符 \(i\) 变成 \(j\) 的最小代价即可
时间复杂度 \(O(n^{5})\),但毛估估一下 子区间的子区间 个数非常少,根本跑不满
261Ex
DAG 上是平凡的:设 \(f[u,0/1]\) 表示在点 \(u\),轮到 \(0/1\) 操作的答案,根据实际含义转移即可
有环的话初值不变,但无法转移。注意到转移后权值和不降,按 DP 值从小到大转移即可。时间复杂度 \(O(m\log n)\)
wtz 的线性做法:采用记搜的形式。若第二次访问到一个 DP 状态,直接返回 \(\inf\)(注意不是把 DP 值设为 \(\inf\))。第二次访问意味这当前的路径成环,若环上轮到 \(0\) 操作的点有其他出边,那么 \(0\) 一定会走出环;若没有,只能一直绕环,答案就是 \(\inf\)
259Ex
tag:组合数,DP,根号分治
258Ex
tag:DP,矩乘
258G
tag:三元环计数,bitset
257Ex \(\star\)
记最后选出的集合为 \(D\),那么答案为
记 \(s_{i}=\sum a_{i,p},ss_{i}=\sum a_{i,p}^{2}\)
记 \(b_{i}=6ss_{i}-s_{i}^{2}-36c_{i}\)
下忽略常数 \(\frac{1}{36}\)。考虑函数 \(f(x)=\sum s_{i}x+b_{i}\),若 \(x\) 确定,可以贪心选出最大的 \(k\) 个 \(s_{i}x+b_{i}\) 作为 \(D\)
容易发现若最优解的 \(\sum s_{i}=x'\),那么 \(f(x')\) 就等于答案。我们不知道 \(x'\),但若能算出 \(x\) 在每个点的答案,取 \(\max\) 就能得到 \(f(x')\)
考虑 \(x\) 从 \(-\infty\) 变化到 \(\infty\) 的过程,会有一些 \(i\in D\) 被 \(j\not\in D\) 替换掉,我们也只需要在发生替换后重新计算答案。\(j\) 能替换 \(i\) 当且仅当 \(s_{j}x+b_{j}\ge s_{i}x+b_{i}\Rightarrow x\ge\frac{b_{i}-b_{j}}{s_{j}-s_{i}}\)。
按 \(x\) 升序考虑,不断尝试替换后取最优解即可。时间复杂度 \(O(n^{2}\log n)\),瓶颈在于排序
256Ex
tag: 线段树,势能分析
\(\lfloor\frac{a}{c}\rfloor b\ne\lfloor\frac{ab}{c}\rfloor\)
256G
tag: DP,矩乘
竟然做了 40min。。。肯定先枚举每条边选几个,两条边之间的影响只有顶点,DP 状态记一下上一个顶点选没选,矩阵快速幂优化即可
突然发现我 \({n\choose m}\) 没判 \(m<0\)
236Ex
容斥。对于二元组集合 \(s\),\((i,j)\in s\) 表示钦定 \(i,j\) 权值相等,\(f(s)\) 表示满足 \(s\) 中限制的方案数,则答案为 \(\sum(-1)^{|s|}f(s)\)
\(s\) 中限制把 \(n\) 个点分成了若干连通块,考虑逐个加入连通块,剩下的问题是计算集合 \(s\) 带容斥系数的答案。显然方案数 \(\displaystyle g(s)=\lfloor\frac{M}{\text{lcm}_{i\in s}D_{i}}\rfloor\),容斥系数 \(h(|s|)\) 等于 \(\sum_{e}(-1)^{|e|}\),\(e\) 为一个使 \(|s|\) 个点联通的边集。
考虑归纳计算 \(h(n)\)。用任意连边的容斥系数和(\(2^{\frac{n(n-1)}{2}}\) 种,其中奇偶各一半,为 \(0\))减去不连通的和,后者可以枚举 \(1\) 所在连通块 \(s\),若 \(|s|\ne n-1\) 则 \(1,-1\) 相互抵消,不用考虑。因此 \(h(n)=-(n-1)h(n-1)\)
转移:\(\displaystyle dp[s]=\sum_{t\subseteq s,u\in t}dp[s\setminus t]g[t]h[|t|]\),时间复杂度 \(O(3^{n})\)。\(u\in t\) 是为了指定加入连通块的顺序。
注意 \(\text{lcm}>M\) 时及时 break