Monthly Expense POJ - 3273 最大值最小化 類似二分
阿新 • • 發佈:2018-11-08
#include <iostream> #include <cstdio> using namespace std; const int maxn=111111; int a[maxn]; int n,m; bool judge(int mid) { int st=0; int cont=0; for(int i=0;i<n;i++) { st+=a[i]; if(st>mid) { cont++; st=a[i]; } } if(cont<m) return true; else return false; } int main() { cin>>n>>m; int sum=0; int max1=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]>max1) max1=a[i]; sum+=a[i]; } int l=max1; int r=sum; int ans; while(l<=r) { int mid=(l+r)/2; if(judge(mid)) { r=mid-1; ans=mid; } else { l=mid+1; } } printf("%d\n",ans); return 0; }