对于给定的一个长度为n 的正整数数列 ai,现要将其分成连续的若干段,并且每段和不超过 m(可以等于 m),问最少能将其分成多少段使得满足要求。
输入格式
第一行包含两个正整数 n,m,表示了数列的长度与每段和的最大值。
第二行包含 n 个空格隔开的非负整数 ai
数据范围:1<=n<=10^5 1<=Ai<=m<=10 ^4
输出格式
一个正整数,输出最少划分的段数。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
5 6
4 2 4 5 1
样例输出
3
题意:
从第一个数开始分段,如果大于最大值就重新开一段;
将段数累加加好;
Accept Code:
#include <stdio.h>
int s[100005];
int main()
{
int i,j,n,m,sum=0,ans=0;
scanf("%d%d", &n,&m);
for(i=0; i<n; i++)
scanf("%d", &s[i]);
for(i=0; i<n; i++)
{
if(s[i]+sum>m)
{
ans++; sum=0;
}
sum+=s[i];
}
if(sum) ans++;
printf("%d\n", ans);
return 0;
}