题目1502:最大值最小化

来源:互联网 发布:印度教 基督教 知乎 编辑:程序博客网 时间:2024/04/30 07:59
/*    找最小值中的最大值 ,是之满足条件,果断二分     */#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;    }

原创粉丝点击