当相邻的两盒大于x到时候,应该先吃那一盒呢?
答案:正着遍历,吃后面;反着遍历,吃前面!
为什么是这样的呢?
比如一个样例:
5 6
4 5 3 6 2
此时,若正着遍历,4+5>6,如果吃4(a[1]),就考虑不到a[3],吃5(a[2])则一举两得。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,x;
ll a[100005];
ll ans;
int main()
{
cin>>n>>x;
for(int i=1;i<=n;i++){//这里保证了先处理a[1],而不是先处理a[0];
cin>>a[i];
if(a[i]+a[i-1]>x){
int yy=a[i]+a[i-1]-x;
a[i]-=yy;
ans+=yy;
}
}
cout<<ans;
}