题目描述
分析:首先判断第一个盒子里的糖果有没有超过最大和x, 如果超过则吃掉部分到达x。然后进行遍历,如果两盒数量之和大于x, 则吃掉后面一个盒子的部分糖果使总和不超过x。
- 为什么是吃掉后一个盒子而不是选择吃前一个盒子呢?
- 因为这样可以使得下一轮的两个盒子数量之和更少。
#include <bits/stdc++.h>
using namespace std;
int data[100000000];
int main()
{
long n, x; //糖盒数量, 最大和
long sum = 0; //记录吃掉的数量
scanf("%d%d", &n, &x);
for(int i=0; i<n; i++){
scanf("%d", &data[i]);
}
if(data[0] > x) {
sum += data[0] - x;
data[0] = x;
}
for (int i = 0; i < n; ++i) {
if((data[i] + data[i+1]) > x){
sum += data[i]+data[i+1]-x;
data[i+1] = x - data[i];
}
}
cout << sum;
return 0;
}