计蒜客--接受惩罚

有 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);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值