Codeforces Round #374 (Div. 2)
本文共 721 字,大约阅读时间需要 2 分钟。
A. One-dimensional Japanese Crossword
B. Passwords
C. Journey
- \(dp(i,j)\)表示走到\(i\)经过\(j\)个点的最小花费。
D. Maxim and Array
- 记\[M=\prod_{i=1}^{n}{a_i}\]
- 假设将\(a_i=a_i+x\),则增量为\(\frac{M}{a_i}\cdot(a_i+x)-M\),即\[\frac{Mx}{a_i}\]
- 显然为了让值变小,增量需要为负数,且\(|\frac{M}{a_i}|\)需要尽可能大。
- 根据\(M\)的正负分类讨论取正负值即可。
- 因为每次取正值最小、负数最大,可以用优先队列维护。
E. Road to Home
- \(f(i)\)表示在不超过\(r_i\)的前提下最多能唱的数量,\(g(i)\)表示从\(l_i\)前最多能唱的数量。
- 每次从一个位置开始唱歌,必然是能唱到不能唱为止,否则就算中途停下来也只是将唱歌区间后移了而已。
- 注意\(f(i)\)的末位置在\((r_i-p,r_i]\)中,这些位置到\(r_i\)都不足以唱一首歌,那么保存最大数量,数量相同的情况下位置最靠左即可。
- 假设\(f(i)\)的最优位置在\(x\),那么下一次可以唱歌的时间点为\(x+t\),显然需要找到\(j\)满足\(x+t\le r_j\),此时有两种决策:
- 唱歌到\(r_j\)边界,更新\(f(j)\);
- 停止唱歌直到\(l_{j+1}\),更新\(g(j+1)\)。
转载于:https://www.cnblogs.com/mcginn/p/5931415.html