花花生米

导航

贪心-恰糖果

题目链接:https://www.luogu.com.cn/problem/P3817
分析有错欢迎集美们指出。
题目:
有n个糖果盒,第 i个盒中有 ai颗糖果。每次可以从其中一盒糖果中吃掉一颗,想知道,要让任意两个相邻的盒子中糖的个数之和都不大于x,请问至少需要吃掉几颗糖果。
输入格式:
第一行输入两个数字,用空格隔开,分别代表糖果盒的个数n和给定的参数x;
第二行有n个用空格隔开的整数,第i个整数代表第i个盒子糖果数目ai;
输出格式:
输出一行一个整数,代表最少要吃掉的糖果数目。

输入样例1:
3 3
2 2 2
输出样例1:
1

输入样例2:
6 1
1 6 1 2 0 4
输出样例2:
11

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		int a=in.nextInt();
		int x=in.nextInt();
		long sum=0;
		int []aa=new int [100002];
		for(int i=1;i<=a;i++)
		{
			aa[i]=in.nextInt();
		}
		for(int i=1;i<=a;i++)
		{
			if(aa[i]+aa[i+1]>x)
			{
				sum+=aa[i+1]-x+aa[i];
				aa[i+1]=x-aa[i];
			}
		}
		System.out.println(sum);
	}

}

自己的思考:
1.因为要求的是最少数目,而且是不大于x,所以我们就可以把当前盒子里面的糖果吃到剩余数量就为x(小心长蛀牙哟,嘿嘿嘿);
2.同时还要面临吃前一盒呢还是后面一盒呢(或者吃当前这一盒还是后一盒呢,这个说法就要看自己囊凯定义了);
比如:
5 6
4 5 3 6 2
6
如果我们先吃前一盒,吃掉四个,第二盒就只需要吃掉两个,可是第三盒改囊们整呢?所以到底该怎样选择才是最好的选择,看下面的图就知晓了:

x=6

posted on 2020-04-20 13:34  花花生米  阅读(359)  评论(0编辑  收藏  举报