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 }
View Code
原文地址:https://www.cnblogs.com/gryzy/p/13960967.html