LOJ#10006. 「一本通 1.1 练习 2」数列分段

题目描述

对于给定的一个长度为 NNN 的正整数数列 AiA_iAi​​,现要将其分成连续的若干段,并且每段和不超过 MMM(可以等于 MMM),问最少能将其分成多少段使得满足要求。

输入格式

第一行包含两个正整数 N,MN,MN,M,表示了数列 AiA_iAi​​ 的长度与每段和的最大值;

第二行包含 NNN 个空格隔开的非负整数 AiA_iAi​​。

输出格式

输出文件仅包含一个正整数,输出最少划分的段数。

样例

样例输入

5 6
4 2 4 5 1

样例输出

3

数据范围与提示

对于 20%20\%20% 的数据,有N≤10N\le 10N10;

对于 40%40\%40% 的数据,有N≤1000N\le 1000N1000;

对于 100%100\%100% 的数据,有 N≤105,M≤109N\le 10^5, M\le 10^9N105​​,M109​​,MMM 大于所有数的最大值,AiA_iAi​​ 之和不超过 10910^9109​​。

 1 //2018-08-09 19:51:00
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int N = 1000001;
 8 int n, m;
 9 int a[N];
10 int tot, ans;
11 
12 int main(){
13     cin >> n >> m;
14     for(int i=1; i<=n; i++) cin >> a[i];
15     ans++;
16     for(int i=1; i<=n; i++){
17         tot += a[i];
18         if(tot > m) tot = a[i], ans++;
19     }
20     printf("%d\n", ans);
21 
22     return 0;
23 }

猜你喜欢

转载自www.cnblogs.com/sineagle/p/9451462.html