Information
- ID
- 168
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 113
- Accepted
- 17
- Uploaded By
凡是二分题,难点总是在找check,所以只要能找到check,题就很容易了
#include<iostream>
using namespace std;
#define MAX 1000000007
#define N 100007
int n,m,s;
int a[N];
int check(int x){
int now=0,cns=1;
for(int i=1;i<=n;i++){
if(now+a[i]<=x)now+=a[i];
else {
cns++;
i--;
if(cns>m)return false;
now=0;
}
}
return true;
}
int search(int l,int r){
int mid;
while(l<=r){
mid=(l+r+1)>>1;
if(check(mid))r=mid-1;
else l=mid+1;
}
return r+1;
}
int main(){
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
s+=a[i];
}
int ans=search(0,s);
cout<<ans;
return 0;
}
By signing up a 追梦算法网 universal account, you can submit code and join discussions in all online judging services provided by us.