Land Acquisition G

这题一眼DP,但是题目没说必须要连续划分,而这种序列DP是肯定要连续划分的,所以我们要用贪心啥的改变一下序列的顺序然后进行连续划分

我们发现,如果一个长方形的长和宽都小于等于另一个长方形的长和宽,那么这个长方形是可以完全不用考虑的。因为对任意一种方案,我们都可以把这个长方形放在另一个长方形所在的组别(如果这两个长方形不在同一个组的话)而不影响答案

所以我们以长为第一关键字,宽为第二关键字从大到小排序,然后去除无用矩形(可以想想怎么做,具体见洛谷提交代码,非常easy),剩下的长方形的长一定单调递减,宽一定单调递增

然后我们就可以猜测此时可以连续划分了

证:如果有一种方案不连续,我们假设[p,l]是一组,然后[l+1,r]不是这一组(可能是其他多个组的混合),然后第r+1个是这个组的,那么我们将[l+1,r]的长方形全部放在这个组,答案不会更差。因为如果某一组全在[l+1,r]中,那么这一组的费用在改变之后就不用计算了;如果某一组的开头在[l+1,r]中但是结尾不在,那么这一组的开头在改变之后一定也会在r+1之后,而长度是单调递减的,所以这一组的费用也减少了;如果某一组的开头不在[l+1,r]中但是结尾在,那么这一组的结尾在改变之后一定也会在p之前,而宽度是单调递增的,所以这一组的费用也减少了

其实我最开始证明的时候想的是利用冒泡排序交换,但是这里启发我们,不要一直想着交换,如果可以自由分配组别的话,可以考虑直接改变组别

然后DP方程就很简单了,写出来就知道是斜率优化,而且方程也不难

这道题目就告诉我们,如果以后出现了这种二维属性的情况,考虑完全包含,并且去除无用元素之后,两个属性一个递增一个递减

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示