AtCoder Beginner Contest 271(E,F,G,H)

一个悲伤的故事。。。

ABC271E Subsequence Path

考虑设 \(f_i\) 为以第 \(E_i\) 条边结束的最优路径,设这条边是 \(u_i\to v_i\) 边权为 \(w_i\) 的边,那么转移可以枚举上一条边 \(E_j\),看 \(v_j=u_i\) 是否成立,如果成立就可以用 \(f_j+w_i\) 更新 \(f_i\)

不难发现只需要在每个点处记录一下以这个点为终点的 \(f\) 的最小值就可以 \(O(1)\) 转移了。

于是就做完了,复杂度线性。AC Code

ABC271F XOR on Grid Path

考虑把整个图劈成两半,从 \((1,1)\)\((N,N)\) 分别开始跑 DP,然后在相交处计算答案。

一开始想的是横着劈,这样上下各有 \(\binom{\frac{3N}{2}-2}{N-1}\le 6906900\) 种情况,感觉很稳结果写了写 TLE 了。。Code

然后发现斜着劈貌似更好,这样一来只有 \(2^{N-1}\le 524288\) 种情况,就非常稳健地 AC 了。AC Code

ABC271G Access Counter

首先我们预处理出来 \(P_{i,j}\),其中 \(0\le i,j\le 23\),表示如果这一次 Access 在第 \(i\) 个时刻,下一个 Access 在第 \(j\) 个时刻的概率是多少。这个可以通过算一个 \(\sum_{n\ge 0} q^n=\frac{1}{1-q}\) 之类的东西得到。

具体来说我们设 \(p_x\) 为第 \(x\) 个时刻 Access 的概率,算出来 \(i+1\to j-1\) 这一段的 \((1-p_x)\) 乘积记为 \(X\),再算出来所有的 \((1-p_x)\) 乘积记为 \(Y\),那么

\[P_{i,j}=\sum_{n\ge 0}Y^n(X\times p_j)=\dfrac{X\times p_j}{1-Y} \]

然后就可以直接矩阵快速幂优化 DP 了,\(f_i(x)\) 表示第 \(i\) 次 Access 在第 \(x\) 个时刻的概率,转移时直接乘上 \(\bold{P}\) 矩阵就可以了。时间复杂度 \(O(24^3\log N)\)AC Code

ABC271H General General

看了一眼感觉是史诗级分类讨论,先咕着(雾

posted @ 2022-10-02 21:53  云浅知处  阅读(195)  评论(1编辑  收藏  举报