题目链接:#10006. 「一本通 1.1 练习 2」数列分段 - 题目 - LibreOJ (loj.ac)
思路:从第一个数开始遍历,依次求和,当和大于M时(因为题目要求每段和不超过 M(可以等于 M)),即划分出第一段不超过M的情况,此时要划分下一段,所以要把和置为0,重复以上操作,最终统计出分段数,输出答案即可。
AC代码
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <cmath>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define endl '\n'
#define ll long long
#define inf 0x3f3f3f3f
#define lowbit(x) x & (-x)
using namespace std;
const int N = 1e5 + 10;
int t, n, m, l, r, ans = 1, a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int i, j, k, s = 0;
cin >> n >> m;
for (i = 1; i <= n; i++) {
cin >> a[i];
s += a[i];
if (s > m) {
ans++;
s = 0;
s += a[i];
}
}
cout << ans << endl;
return 0;
}