loj10006数列分段
题目描述
对于给定的一个长度为 N 的正整数数列 A,现要将其分成连续的若干段,并且每段和不超过 M(可以等于 M),问最少能将其分成多少段使得满足要求。
输入格式
第一行包含两个正整数 N,M表示了数列 A 的长度与每段和的最大值;
第二行包含 N 个空格隔开的非负整数 。
输出格式
输出文件仅包含一个正整数,输出最少划分的段数。
样例
样例输入
5 6
4 2 4 5 1
样例输出
3
数据范围与提示
对于 100% 的数据,有 N<=100000,M<1E9,M 大于所有数的最大值。
___________________________
简单贪心
___________________________
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e5+10; 4 int n,m; 5 6 int main() 7 { 8 scanf("%d%d",&n,&m); 9 long long sm=0,ans=0; 10 for(int x,i=1;i<=n;++i) 11 { 12 scanf("%d",&x); 13 if(sm+x>m) 14 { 15 ans++;sm=x; 16 } 17 else 18 sm+=x; 19 } 20 if(sm)++ans; 21 cout<<ans; 22 return 0; 23 }