题目内容:
对于给定的一个长度为 NN 的正整数数列 A_iAi,现要将其分成连续的若干段,并且每段和不超过 MM(可以等于MM),问最少能将其分成多少段使得满足要求。
输入格式:
第1行包含两个正整数 N,MN,M,表示了数列 A_iAi 的长度与每段和的最大值,第 22 行包含 NN 个空格隔开的非负整数 A_iAi,如题目所述。
输出格式:
一个正整数,输出最少划分的段数。
样例:
5 6 3 4 2 4 5 1
思路:合并他们且满足题意,就只能往最大值m的方向去靠,不妨使用sum记录临时的和,模拟一遍即可。小于就接着装,满了就置零,ans+1,结束后我们康康sum是不是空的,不是就再给他一个袋子
#include<bits/stdc++.h>
#include<string>
using namespace std;
const int N=1e6;
const int mod=10007;
int n,m,num[N],ans;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>num[i];
int sum=0;
for(int i=1;i<=n;i++)
{
sum+=num[i];
if(sum>m)ans++,sum=num[i];
else if(sum==m)ans++,sum=0;
}
if(sum)ans++;
cout<<ans;
return 0;
}