讲解一下这道题目的思路:
首先呢我们确定 for
循环·的遍历顺序从 2 开始向 n 遍历。
如果我们遇到 ceil[i]
大于 ceil[i+1]
则我们就需要对 ceil[i]
进行分割。
接下来就是如何计算该劈成几份使得 ceil[i]
不超过 ceil[i+1]
可以得到我们需要将 ceil[i]
劈成 (ceil[i]+ceil[i+1]-1)/ceil[i+1]
份,那么我们需要操作的次数就是份数减 1 。
我们将答案加上操作次数,并且更新 ceil[i]
为被劈后的大小 ceil[i]/p
其中 p 为被劈的份数。
这就是我们的思路然后放上伪代码:
for(int i=n-1;i>=1;i--){
if(c[i]<=c[i+1])continue;
int p=/*份数*/
cnt+=p-1;//加上答案
c[i]=c[i]/p;//更新
}