Milena and Admirer

看这篇题解

这题没有发现什么好的与题目有关的性质,所以很可能是考算法,而一般是DP和贪心,B题一般不会考DP,所以一般是贪心

我们用数学归纳法来证明

我们仍然来先确定一个操作顺序,我们发现每一个数的拆分都不会影响其他的数(也就是说,如果我们已经知道了每个数在最终的方案中会被拆分成什么样子,我们无论按照什么样的顺序拆分都是可以的),所以我们直接考虑每个数的拆分方案就好了

假设我们从左往右依次考虑每个数的拆分方案,假设前i1个数已经按照最优的方案进行拆分了,现在考虑原序列中第i个数,现在序列中这个数前面一个数为x。由于是最优的拆分,于是有xai,但是我们发现此时就没有办法获得ai的最优的拆分了,因为按照常理来说我们肯定是想要在符合条件的情况下,拆分完ai之后,最后的一个数字尽量小(这样才方便后面的数的拆分),但是要达到这个目的,我们就肯定想要将ai拆分成多份,但是多份就会导致答案增大了,所以我们换个方向,从右往左考虑(或者说从左往右考虑甚至会导致考虑到某个位置的时候就无解了,然而原题是一定有解的)

假设我们已经按照最佳的方案把后面的数都拆了,考虑当前的数a,和这个数后面的一个数b

如果ab,那么肯定不用拆。因为拆了不仅会增加次数,而且会让之后的数更小(指的是下一次的b更小),这样显然不优,因为这样的话,对任意一种合法的方案,由于(我们前面提到)拆分数的顺序是无所谓的,我们将这个方案中的“拆分a”变成不拆分“a”,序列合法且答案更小

如果a>b,那么我们至少要拆成x=ab份。假设我们要拆成x份,肯定是让这x份中最小的数越大越好。显然最大是y=ax。而如果我们最小的数是这么多,我们把剩下的从后往前依次放,最终放成这个样子

如果我们拆成更多份,首先我们肯定会增加次数,而且我们也可以发现,最后的b一定不会更大,这个反证很容易,所以我们不会拆成更多份

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