。。。

凌艺樽  •  1年前


#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int INF=0x3f3f3f3f;

long long maxx;
int minn=INF,maxn=-INF;
int a[N],n,m;

bool check(long long x)
{
	int sum=0,f=1;
	for(int i=1;i<=n;i++)
	{
		sum+=a[i];
		if(sum>x)
		{
			sum=a[i];
			f++;
		}
	}
	return f<=m;
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		maxx+=a[i];
		maxn=max(maxn,a[i]);
		minn=min(minn,a[i]);
	}
	if(n==m)
	{
		cout<<maxn;
		return 0;
	}
	long long l=minn,r=maxx+1;
	while(l<r)
    {
	    long long mid=(l+r)>>1;
	    if(check(mid))
		    r=mid;
	    else 
		    l=mid+1;
	}
    cout<<r;
	return 0;
}

评论: