Codeforces DP 题杂练

CF1271D Portals

\(\text{Problem}\)题目链接

\(\text{Solution}\)

首先有个显然的 \(dp\),记占领第 \(i\) 个点后有 \(j\) 个兵的最大答案。然后直接暴力转移是 \(O((n+m)(k+\sum\limits b_{i}))\) 的,考虑优化将兵派到其他点驻守的转移过程。

发现对于一个点 \(x\) 来说,如果存在点 \(v\)\(u\) 的边\((v>u)\),则可以只在 \(max\{v\}\) 的位置考虑转移到 \(x\)。很显然,如果想派一个兵驻守点 \(x\),可以在最后能到达 \(x\) 的点再过去。在此之前,这个兵可以一直“凑数”用,也可以满足 \(a_{i}\) 的限制,必然没有比它更优的转移方式。故时间复杂度优化到 \(O(n(k+\sum\limits b_{i}))\),可以通过本题。

\(\text{Code}\)代码链接


CF1265E Beautiful Mirrors

\(\text{Problem}\)题目链接

\(\text{Solution}\)

经典期望 \(dp\),考虑正向推和反向推。

正向:

\(f_{i}\) 表示到第 \(i\) 天且第 \(i\) 天也开心的期望天数。显然答案就是 \(f_{n}\)

对于第 \(i\) 天来说,有:

\[\qquad f_{i}=(f_{i-1}+1)\times \frac{p_{i}}{100}+(f_{i}+f_{i-1}+1)\times \frac{100-p_{i}}{100} \qquad \]

即可能到第 \(i\) 天时可以继续走,或者回到了 \(1\) 号节点,要再走期望 \(f_{i}\) 天才能开心。

化简上式,得 \(f_{i}=(f_{i-1}+1)\times \frac{100}{p_{i}}\),即可直接递推得到 \(f_{n}\)

反向:

\(f_{i}\) 表示从第 \(i\) 天开始能开心到极点的期望天数,\(f_{1}\) 即为答案,而 \(f_{n+1}=0\)。此处先假设 \(p_{i}\) 变为 \(\frac{p_{i}}{100}\)

对于第 \(i\) 天来说,有:

\[\qquad f_{i}=(f_{i+1}+1)\times p_{i}+(f_{1}+1)\times (1-p_{i}) \qquad \]

得到 \(f_{1}=f_{2}+\frac{1}{p_{1}}\),将 \(f_{2}\)\(f_{1}\) 表示,得 \(f_{1}=f_{3}+\frac{1+p_{1}}{p_{1}p_{2}}\)。继续推下去,则有:

\[\qquad f_{1}=\frac{1+p_{1}+p_{1}p_{2}+...+p_{1}p_{2}...p_{n-1}}{p_{1}p_{2}...p_{n}} \qquad \]

直接递推即可。

\(\text{Code}\)代码链接

posted @ 2020-10-12 19:26  zkdxl  阅读(189)  评论(5编辑  收藏  举报