观察题目,不自觉地想到了 dp,但是再一看 \(\text{1e5}\) 数据范围,意识到大概是 \(2^{\text{1e5}}\) 的复杂度,绝望了……
然后就很自然地想到了最优策略。(思路很巧妙但是我当时没想到。)
考虑有三行(或三列),分别记为 \(i, j, k\),如果 \(j > i \land j > k\)(也就是一个峰),那么走 \(j\) 显然不优,就可以把 \(j\) 删去。
维护的话可以考虑用优先队列把行和列维护在一起(当然也要同时维护是行还是列),乱搞就行了,复杂度 \(O((h+w)\log(h+w))\),可以通过原题,但是可以被更大的数据卡掉。
那么就存在一种更优解。最开始的思路就是删峰,显然可以用单调队列维护凸包,分别维护行和列,看哪个最优先取哪个,直到两个单调队列都剩一个元素。复杂度是 \(O(h+w)\)。
代码挺好写的,就放个链接吧。我写的是不带 \(\log\) 的。
标签:题目,队列,题解,复杂度,链接,Kyoto,维护,JOISC2022B From: https://www.cnblogs.com/Chronologika/p/17655171.html