二十分代码不太懂
查看原帖
二十分代码不太懂
1070296
lieyang25楼主2024/3/6 09:45
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+9;
typedef long long ll;
ll arr[N];
ll m,sum=0,n;

bool check(ll mid)
{
    ll cnt=0;
    ll flag =0;
    for(int i=1;i<=n;i++)
    {
        if(flag+arr[i]<=mid)
            flag+=arr[i];
        else
            {
                cnt++;
                flag=arr[i];
            }
    }
    return cnt<=m;
}


int main()
{
    ll left=0,right=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>arr[i];
        left=max(left,arr[i]);right+=arr[i];
    }
    while(left<right)
    {
        ll mid = left+(right-left)/2;
        if(check(mid))
            right = mid;
        else
            left = mid+1;
    }
    cout<<left;
}

2024/3/6 09:45
加载中...