http://acm.pku.edu.cn/JudgeOnline/problem?id=3273 把N天分为M段连续区域,求M段区域中的最小最大值。 其实自己还没怎么完全理解二分的实现,下面的代码是看别人写的。惭愧。 #include<stdio.h> int main() { int N,M,max,min,mid,i,k,sum,money[100001]; while(scanf("%d%d", &N, &M)!=EOF) { max=0; min=-1; for(i=1; i<=N; i++) { scanf("%d", &money[i]); max+=money[i]; if(min<money[i]) min=money[i]; } //max为所有money的总和 //min为money里的最大值 while(min<max) { mid=(min+max)>>1; sum=0; k=0; for(i=1; i<=N; i++) { sum+=money[i]; if(sum>mid) { sum=money[i]; k++; } } //重新分配上下界 if(k<M) max=mid; else min=mid+1; } printf("%d/n", max); } return 0; }