有 nn 个宝箱排成一排,每只宝箱里藏着一只怪物,会对你造成ai伤害。现在你需要选择连续的 mm 个宝箱,来接受惩罚。因为你使用了某些手段,可以提前知道每个宝箱里怪物造成的伤害。那么问题来了,如何选择可以使得承受的伤害最小。
输入格式
第一行两个整数 n,m。
第二行 nn 个整数 ai。数据范围 1≤m≤n≤3000,1≤ ai ≤100。
输出格式
一行一个整数,表示承受伤害的最小值。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
9 4
1 10 10 5 4 8 8 3 7
样例输出
23
分析:首先输入格式很容易写出来,对于平时的判断大小,我们通常会选择一个变量max,min来作为判断的依据,同理这题我们依旧使用最小值来比较,但是不同的是本题需要4个之和来进行比较,因此我们需要用到for循环来进行求和,在用一个for循环来进行求每四项的和,首先我们要保证内循环每次循环m次,而外循环每次循环n-m+1项;正如这样
for(int i=0;i<n-m;i++) {
for(k=i+1;k<x+m;k++) {
b += a[k];
}
x++;
if(b<min) {
min = b;
}
b=0;
}
}
这一部分是本题的核心部分,两层for循环就可以解决问题了。
下面是本题的代码展示:
import java.util.Scanner;
public class 接受惩罚 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[n];
int min = 0,b=0,x=1,k;
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
}
for(int j=0;j<m;j++) {
min += a[j];
}
for(int i=0;i<n-m;i++) {
for(k=i+1;k<x+m;k++) {
b += a[k];
}
x++;
if(b<min) {
min = b;
}
b=0;
}
System.out.println(min);
}
}