ABC 404 FG
F
概率 \(dp\) + 组合数枚举trick + 复杂度分析
设 \(dp[i][j]:\) 进行了 \(i\) 轮,至少按了 \(j\) 次正确按钮的概率。
\(ans = dp[T][K]\)
\(init: dp[0][0] = 1\)
\(trans:\) 决策第 \(i\) 轮按下按钮的所有情况:
设在第 \(i\) 轮中,按下第 \(j\) 个按钮 \(c_{j}\) 下。
则有:\(c_{1} + c_{2} + ... + c_{n} = M\)。
对于第 \(i\) 轮的所有情况,一定取的是最优解,因此转移得到的概率应当取所有情况的最大值。因此转移式为:
注意上述取max部分的处理:\(dp\) 数组的定义是"至少"而不是"恰好",因此按钮按多时,仍取之前按下 \(0\) 次的概率。
因此问题转化为了枚举 \(c_{1} + c_{2} + ... + c_{n} = M\) 的所有可能性。
注意到 \(n\) 很大,但 \(M <= 30\) 很小。可以只枚举 \(c_{i} > 0\) 的所有 \(c_{i}\)(不会超过 \(M\) 个),那么剩下的 \(c_{i}\) 就均为 \(0\)。又能注意到,\(c_{i}\) 的枚举顺序是不会影响结果的,且计算的是最大值而不是总和,因此对于一个固定的集合,没有必要枚举它的全部排列,只需要枚举一个即可。因此可以通过升序枚举排列的方式来达到上述要求。复杂度大概是 \(O(M^{3})\)(暂时还不是很懂,以后补)。总复杂度 \(O(TKM^{3})\)。
G
差分约束模板
将每个等式条件看作两个不等式:$ \sum_{j=l_{i}}^{r_{i}}A_{j}=S_{i} $ 可等价于 \(pre_{r_{i}} - pre_{l_{i-1}} = S_{i}\),进一步等价于:
- $ pre_{r_{i}} - pre_{l_{i-1}} >= S_{i} $
- $ pre_{r_{i}} - pre_{l_{i-1}} <= S_{i} $
且还需要注意到一个约束条件:\(A_{i} > 0\),等价于:
- $ pre_{i} - pre_{i - 1} >= 1 $
利用以上三个不等式建图。由于是求最小解,因此等价于求最长路(具体见下方博客链接的讲解)。将以上不等式均改为 \(>=\) 的形式,初始化 \(dist[0] = 0\),\(spfa\) 跑最长路即可。复杂度 \(O(nm)\)。