正解(100pts)
考虑贪心思想,先记录每个竹子需要裁剪次数(用数组 p 记录),随后从最大次数枚举。
核心Code:
//这里p[i]指的是操作次数
for(int i=maxn;i>0;i--){ //枚举
for(int j=1;j<=n;j++){
if(p[j]==i){ //当操作次数相等
if(a[j]!=a[j+1]){ //判断连续性
ans++;
}
p[j]--; //将操作次数减掉
a[j]=sqrt(a[j]/2+1); //操作竹子高度
}
}
}