AC 代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,ans,m,mins=INT_MIN;
long long arr[100001];
bool check(int x){
int cnt=1,s=0;
for(int i=0;i<n;i++){
if(s+arr[i]<=x){
s+=arr[i];
}
else{
cnt++;
s=arr[i];
}
}
return cnt<=m;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++) {
cin>>arr[i];
ans+=arr[i];
if(arr[i]>mins){
mins=arr[i];
}
}
int l=mins,r=ans,mid;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<r+1;
return 0;
}
WA 代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,m,arr[100001],v,maxs=INT_MIN;
bool check(int x){
int cnt=1,s=0;
for(int i=1;i<=n;i++){
s+=arr[i];
if(s>x){
cnt++;
s=arr[i];
}
}
return cnt<=m;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>arr[i];
v+=arr[i];
maxs=max(maxs,arr[i]);
}
long long l=maxs,r=v,mid;
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<r+1;
return 0;
}
求助dalao悬赏一关