Milena and Admirer

看这篇题解

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

我们用数学归纳法来证明

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

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

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

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

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

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

posted @ 2024-03-09 14:46  最爱丁珰  阅读(1)  评论(0编辑  收藏  举报