我这个判断是不是非常麻烦啊

P1182 数列分段 Section II

排版 粘代码时点击回复讨论下第二行第三个按键
by 角边边证全等 @ 2018-02-11 19:17:12


@[Harzard](/space/show?uid=67282)
by 角边边证全等 @ 2018-02-11 19:31:50


```cpp int check(int x) { int sum=0; int t=0; for(int i=1;i<=n;i++) { sum=sum+a[i]; if(i==n&&sum<=x) { t++; break; } if(i==n&&sum>x) { t=t+2; break; } if(sum==x) { t++; sum=0; } if(sum>x) { sum=a[i]; t++; } } return t<=k; ```
by Harzard @ 2018-02-12 14:17:34


``` #include <iostream> #include <stdio.h> #include <stdlib.h> #include <math.h> using namespace std; int n,m,a[100005]; int check(int x) { int sum=0,cnt=0; for(int i=0;i<n;i++){ if(sum+a[i]<=x){ sum+=a[i]; }else{//超过最大值 sum=a[i]; cnt++; } } if(cnt>=m) return 1; else//cnt<m return 0; } int main() { //while(scanf("%d%d",&n,&m)) { scanf("%d%d",&n,&m); int r=0,l=0,ans; for(int i=0;i<n;i++) { scanf("%d",&a[i]); l=max(l,a[i]); r+=a[i]; } while(r>=l) { int mid = (r+l)/2; if(check(mid)==1){ l=mid+1; }else{ r=mid-1; ans=mid;//最大值 的最小值 } //cout<<"["<<l<<","<<r<<"]"<<ans<<endl; } printf("%d\n",ans); } return 0; } ```
by Freddie @ 2018-11-03 10:19:51


|