Heirloom Painting

先考虑无解的情况,来看样例三,很容易发现是因为k太大了,所以每次都会修改之前已经改好的。于是我们猜想,如果任意一段连续的数的长度都小于k,那么就无解,证明比较容易,反证就好了,如果存在一个解,那么这个解的最后一步操作,一定是连续的k个格子,而且这k个格子的颜色一定要一样,与我们前面的条件矛盾,所以无解;于是我们猜想如果存在一个连续段长度大于等于k,那么一定有解,我们假设只有一个连续段,然后考虑从这个连续段入手,除了这个连续段,剩下的连续段的长度都小于k,我们依次涂每个连续段,最后再涂这个最长的连续段,显然是一个解;拓展到多个连续段的情况,对于两个长度大于等于k的连续段之间的连续段(长度都小于k),我们按照上面的方法涂,然后最后涂大的连续段,就是一个解,而且可以发现这个解是最优解,来证明一下

对一个长度为len的连续段,将其覆盖最少需要lenk次,那么下界就是所有这种连续段的和,显然我们上面的方法可以达到这个下界

代码可以看看,为了避免麻烦,我们断环成链的时候选取两个相邻且不同的数之间断开就好了

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