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}\) 一样,这是必要的操作,所以最优。

posted @ 2024-10-22 21:41  PM_pro  阅读(24)  评论(0)    收藏  举报