真的一道很简单的题
思路:
定义变量sum用来累加a i ,如果这时a i 加sum大于M,就说明分成一段,sum变为0,而这一段是在去掉a i 的情况下小于等于M的一段,所以sum还要等于a i ,最后输出段数+1,加一是因为最后一段还没有加上。
贴代码:
#include <bits/stdc++.h>
using namespace std;
int n, m, s, cnt;
int a[100009];
int main () {
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
if (s + a[i] <= m) s += a[i]; //还没有找到这一段的结尾,继续累加
else { //找到刚才那一段的结尾了
cnt++; //段数加一
s = a[i]; //sum重新回到a[i]
}
}
cout << cnt + 1; //最后一段没有被加上,所以要cnt+1
return 0;
}