P8092 [USACO22JAN] Drought B
Obversion 1:
对于每一个奶牛,如果想要减少它的饥饿度,必须要减少左边,或者右边奶牛的饥饿度。
Obversion 2:
对于最后奶牛的饥饿度,一定小于等于一开始所有奶牛的最小饥饿值。
实际上,当有解时,最后所有奶牛的最小饥饿值越大,我们进行的操作就越少 。
考虑单调性:
如果具有单调性,那么一定可以从左往右对齐来算 。
因为左边的一定小于右边的,我们只能通过减少右边的来和左边的对齐。
这个过程为了不影响左边已经处理好了的,只能消耗更右边的。
一定不劣,因为我们这样做不会改变当前的最小值。
如果最后一个无法对齐,可以证明一定无解。
证明:
有解需要最后一个与倒数第二个一致,但是最后一个比倒数第二个要大。
最后一个值改变只能通过与倒数第二个同时改变。
所以不管怎么操作,最后一个与倒数第二个都不可能一样。
即无解。
proven.
那么如何构造一个最优单调性序列呢?
有解时,最小值一定在最右边。
证明:
反证,如果最小值不在最后面,即存在一个 \(a_{n}(i\ne n)\) 最大。
那么如果想要使得 \(a_{n}\) 与最小值一样,就需要改变 \(a_{n}\),此时只能消耗 \(a_{n-1}\)。
由上面证明,当有解时,\(a_{n-1}<a_{n}\)。
操作完后,此时 \(a_{n-1}\) 成为新的 \(a_{n}\)(因为 \(a_{n}\) 不能动)。
继续这样,直到 \(a_{n-1}\) 为最小值,此时 \(a_{n}\) 一定大于 \(a_{n-1}\)。
由上证明,此时无解。
proven.
因此我们考虑构造一个从右到左递增的序列。
即我们保证 \(a_{i}>a_{i-1}\)。
这是好维护的,我们只需要在当 \(a_{i}>a_{i-1}\) 对齐 \(a_{i-1}\) 即可,消耗 \(a_{i+1}\)。
此时我们发现 \(a_{n}\) 是会被减少的。
那此时的 \(a_{n}\) 是否是最优的?
答案是最优的,因为我们必须要将 \(a_{i}\) 降至与 \(a_{i-1}\) 一样,这是必要的操作,所以最优。

浙公网安备 33010602011771号