题目来源:loj
题目描述
对于给定的一个长度为 n的正整数数列 ai,现要将其分成连续的若干段,并且每段和不超过 m(可以等于m ),问最少能将其分成多少段使得满足要求。
输入格式
第一行包含两个正整数n,m ,表示了数列ai 的长度与每段和的最大值;
第二行包含 n个空格隔开的非负整数 ai。
输出格式
输出文件仅包含一个正整数,输出最少划分的段数。
样例输入
5 6
4 2 4 5 1
样例输出
3
数据范围与提示
对于20% 的数据,有n<=10;
对于40% 的数据,有n<=1000;
对于100% 的数据,有n<=10^5 ,m<=10^9,m 大于所有数的最大值。
code
#include<bits/stdc++.h>
using namespace std;
int n,m,anss,cnt;
int main()
{
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if (cnt+x<=m) cnt+=x;
else
{
anss++;
cnt=x;
}
}
cout<<anss+1<<endl;
return 0;
}