题目描述
给出一个长度为N的正整数数列A,要求将它分为连续的M段,求每段值得最大值最小
思路
最值中的最值,典型二分题。二分答案,判断在这个答案下能否将数列A分为M段即可。
代码
#include <bits/stdc++.h> using namespace std; int m,n; int a[101000]; bool check(int x) { int s=0,sum=1; for(int i=1;i<=n;i++) { if(a[i]>x)return 0; s+=a[i]; if(s>x) { s=a[i]; sum++; } } return sum<=m; } int main() { // freopen("aa.txt","r",stdin); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); int l=0,r=1e9,ans; while(l<r) { int mid=(r+l)>>1; // cout<<r<<' '<<check(mid)<<' '<<l<<endl; if(check(mid))r=mid; else l=mid+1; } printf("%d",r); return 0; }