题意
有一个长度为 n n n 的一个序列,将此序列划分成若干个子序列使每个子序列的和都小于等于 m m m,文最少划分成多少段才能满足要求
思路
其实这道题没有什么贪心吧,每次维护一个 s u m sum sum 值记录当前划分的子序列和,如果加上当前位置的数值仍符合要求,就更新 s u m sum sum。否则,就将其计入答案,再将 s u m sum sum 设为目前位置数值。
答案初始值设为 1 1 1,因为一开始数列本身也算一段。
代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,ans=1,sum=0;
scanf("%d %d",&n,&k);
while(n--)
{
int x;
scanf("%d",&x);
if(sum+x<=k) sum+=x;
else ans++,sum=x;
}
printf("%d",ans);
return 0;
}