1 条题解

  • 0
    @ 2023-2-24 20:29:30
    int a[100001],n,m,sum,max1;
    bool check(int x)
    {
    	int tot=0,pos=0;
    	for(int i=1;i<=n;i++)
    	{
    		if(tot+a[i]<=x)
    		{
    			tot+=a[i];
    			continue;
    		}
    		tot=a[i];
    		pos++;
    	}
    	if(tot>0) pos++;
    	if(pos<=m) return true;
    	else return false;
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		sum+=a[i];
    		max1=max(max1,a[i]);
    	} 
    	int l=max1,r=sum;
    	while(l<r)
    	{
    		int mid=(l+r)>>1;
    		if(check(mid)) r=mid-1;
    		else l=mid+1;
    	}
    	cout<<l;
    	return 0;
    }
    

    看不懂来问我(qwq懒得写注释了) 不要试图复制,我把头文件去了

    • 1

    信息

    ID
    1318
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    58
    已通过
    9
    上传者