【笔记】分组
牛牛有一个n个数字的序列\(a_1,a_2,\dots,a_n\),现在牛牛想把这个序列分成k段连续段,牛牛想知道分出来的k个连续段的段内数字和的最小值最大可以是多少?
int solve(int n, int k, vector<int>& a) {
int sum=0;
for(int i=0;i<a.size();++i)
{
sum+=a[i];
}
int l=0,r=sum; //最小时为0,最大为各个元素的和
while(l<r)
{
int mid=(l+r+1)/2;
if(binsearch(k,a,mid))
{
l=mid;
}
else
{
r=mid-1;
}
}
return l;
}
bool binsearch(int k,vector<int>& a,int val)
{
int count=0;
int sum=0;
for(int i=0;i<a.size();++i)
{
sum+=a[i];
if(sum>=val)
{
sum=0;
count++;
}
}
return count>=k;
}