题目1502:最大值最小化
来源:互联网 发布:印度教 基督教 知乎 编辑:程序博客网 时间:2024/06/10 17:28
/* 找最小值中的最大值 ,是之满足条件,果断二分 */#include <stdio.h>int n,m;bool judge(const int *a,int key){ int sum=0; int count=0; for(int i=0;i<n;i++) { sum += a[i]; if(sum>key) { sum=a[i]; count++; } } if((count+1)<=m) return 1; return 0;}void binary(const int *a,int left,int right){ while(left<right) { int mid=(left+right)/2;;/// left+((right-left)>>1) if(judge(a,mid)) { right = mid; } else { left = mid+1; } } printf("%d\n",left); // ,right %d}int main(){ int t; int a[505]; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); int left=0; int right=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); right += a[i]; if(a[i]>left) { left = a[i]; } } binary(a,left,right); } return 0; }