1 条题解

  • 1
    @ 2026-7-26 15:44:29

    我是题解

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const long long jk=10000000;
    int a[jk],n,m,l,r;
    bool sanb(int k){
    	int f=1,t=1;
    	int p[114514];
    	memset(p,0,sizeof(p));
    	int num=0;
    	for(int i=1;i<=n;i++){
    		if(num+a[i]>k){
    			f++;
    			num=a[i];
    			p[t]=num ;
    			t++;
    			if(f>m)return 0;
    		}
    		else num+=a[i];
    	} 
    	p[t]=num;
    	t++;
    	sort(p+1,p+1+t); 
    	return p[t]<=k;
    }
    signed main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
        	cin>>a[i];
        	r+=a[i];
    	}
    	l=1;
    	r*=2;
        while(r-l>1){
        	int mid=(r+l)/2;
        	if(sanb(mid))r=mid;
    		else l=mid;
    	}
    	cout<<r;
    }
    
    
    • 1

    信息

    ID
    26
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    6
    已通过
    3
    上传者