题目链接:https://www.luogu.com.cn/problem/P3817
这一题是贪心问题。
因为题目要求的是任意的连续的两个数的和都要小于x
,所以,我们要保证每一步都是满足的,这种行为是短视的,只需要保证当前一步是合理就可以,所以我们只要对每一步进行检查,判断是否满足连续的两个数之和小于x
,如果不满足,取走对应情况下的糖果即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1000010;
int n, m;
ll res, cnt;
int main() {
cin >> n >> m;
while (n -- ) {
int x; cin >> x;
if (x + cnt > m) {
int t = x + cnt - m;
x -= t;
res += t;
}
cnt = x;
}
cout << res << endl;
return 0;
}