题目描述
对于给定的一个长度为 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 10N≤10;
对于 40%40\%40% 的数据,有N≤1000N\le 1000N≤1000;
对于 100%100\%100% 的数据,有 N≤105,M≤109N\le 10^5, M\le 10^9N≤105,M≤109,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 }