此题的所有题解均未严谨地说明此题的一个结论「存在至少一组最优方案使得每个交叉路口海拔都为 0 或 1,且海拔都为 0 和 1 的交叉路口分别仅构成一个极大四连通块」,多只是用「发现」「显然」等语句一笔带过,而未做详细阐述。但是此结论是解决此题几乎必要的结论,而且并不显然。
以最高赞的两篇题解为例:
@Karry5307
首先注意到最优方案中点权只有 0 和 1,并且点权为 1 的和为 0 的分别仅构成一个连通块。
@chen_zhe
首先这个题原题好像有一句话是海拔高度不一定为整数。这是坑人用的,误导性提示。其实仔细一想就会发现既然如果可能是小数,那么最后的结果何必要保留整数?那么就可以把那句话当成出题人认为自己活在4月1日的话了。
考虑一个显然的贪心:因为消耗的体力是max{0,h},所以我们并没有必要让海拔呈梯度的上升(也就是每次上升一截,再上升一截),如果直接一次上升到顶,这样可以更优秀。如果整张图都是0的高度,那么很明显是最好的,但是右下角必定是1就很麻烦。我们考虑让整张图左上角都是0,然后产生一个断崖,在右下角都是1即可。
前者直接提出「注意到」,但既未说明如何注意到,也未给出证明;后者的解释就是结论的再阐述,与未解释没有任何区别。
下面我给出我对此结论的简单证明:
下文「连通块」指「内部点高度相同的极大四连通块」。
对于一个方案,若存在高度小于 0 的点,则令所有这些点的高度为 0 更优,因为这些点之间的贡献减小为 0,而其他点的高度无论在调整前后都大于等于这些点的,所以这些点与其他点的贡献一定减小了。同理若存在高度大于 1 的点,则令所有这些点的高度为 1 更优。
现在每个点高度在 [0,1] 区间内,假设其不全为 0 或 1。对于所有不包含西北角的连通块,找到高度最小的一个(称为 S),这个连通块一定存在且不包含东南角。
- 若 S 不与西北角所在的连通块相邻,则将其高度调整为与其相邻的点中的最小高度一定更优,因为 S 内点之间的贡献不变为 0,而相邻点的高度无论在调整前后都大于等于这些点的,所以 S 内的点与其相邻点的贡献一定减小了。
- 若 S 与西北角所在的连通块相邻,则找到与之相邻的点中高度不为 0 且最小的(假设高度为 h),S 的高度一定在 0 与 h 之间。如果将 S 的高度看作自变量 x∈[0,h],那么令 x=0 或 x=h 一定不更劣,因为 S 内点之间的贡献不变为 0,而 S 内的点与其相邻点的贡献是线性函数,最小值一定能在两端取到。
无论是哪种情况,都存在一种不更劣的、连通块更少的方案。不断进行调整,最终每个点的高度一定会停于 0 或 1。从而,一定存在一组最优方案使得点的高度都为 0 或 1。
虽然结论证明不算繁琐,但我认为题解中至少应当包含归纳/调整思想,并以某种形式提到「线性函数在区间上的最值一定在两端中取到」(例如直接写出或设变量做具体讨论)。
我认为,此结论作为本题现有的所有题解的必要结论,其并不显然证明应当作为题解的主体部分之一。阅读完本题的所有题解后,我认为它们均不符合题解提交注意事项,属于「只提供结论的题解」,应当被全部撤下。