洛谷 P1182 數列分段`Section II`
阿新 • • 發佈:2018-12-14
思路: 二分+貪心。
程式碼:
#pragma GCC optimize (2)
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
#define read(x) scanf("%d",&x)
int n,m;
int a[maxn+5];
bool judge(int x) {
int s=0,mm=1;
for(int i=1; i<=n; i++) {
if(a[i]>x) return false;
if(s+a[i]>x) {
mm++;
s=a[i] ;
} else s+=a[i];
if(mm>m) return false;
}
return true;
}
int main() {
read(n),read(m);
for(int i=1; i<=n; i++) {
read(a[i]);
}
int l=0,r=1e9;
while(l+1<r) {
int mid=(r-l)/2+l;
if(judge(mid)) r=mid;
else l=mid;
}
if(judge(l-1)) l--;
if(!judge(l)) l++;
printf("%d",l) ;
return 0;
}