贪心-恰糖果
题目链接: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
作者:Better又
出处:https://www.cnblogs.com/lwyy1223-/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。