看了大佬的思路,写了一个比较简单的算法
肯定是多用第二操作更好一些。大概就是一点点查算,从第一个开始往后数k个数,如果中间有零的话,就要跳过往后走;
如果正好能数到k,那么就把这k个值全部减去,最小值就是min,用了min步
等到最后x大于n的时候,整个算法就要停止。
最后再把剩余的数组中剩余的数字也要加上。
package lanqiao2022;
import java.util.Scanner;
public class 最优清零方案me {
static int[]arr=new int[1000006];
static int x=0;
public static void main(String[] args) {
long step=0;
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
for(int i=1;i<=n;i++) {
arr[i]=sc.nextInt();
}
x=1;
while(x<=n) {
int y=1;
while(y<=k&&arr[x]!=0&&x<=n) {
if(y==k) {
int min=arr[x-y+1];
for(int i=x-y+1;i<=x;i++) {
min=arr[i]<min?arr[i]:min;
}
step+=min;
for(int i=x-y+1;i<=x;i++) {
arr[i]=arr[i]-min;
}
}
y++;
x++;
}
}
for(int i=1;i<=n;i++) {
step+=arr[i];
}
System.out.print(step);
}
}