二分题目

来源:互联网 发布:淘宝店铺公告写招聘 编辑:程序博客网 时间:2024/05/17 04:06

POJ 3273
有点抽象,需要温故而知新
题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份都是连续的天),要求每份的和尽量少,输出这个和。
代码:
//代码的思路即最后的答案

#include <iostream>  using namespace std;  #define maxn 100000  int day[maxn];  int n,m;  int  solve(int low,int high)  {      if(low==high) return low;      int mid=(low+high)/2;      int temp=mid,c=0;       for(int i=0;i<n;++i)      {          if(temp-day[i]>=0)           {              temp-=day[i];          }          else           {              c++;              temp=mid-day[i];          }      }       c++;      if(c>m) return solve(mid+1,high);   //当最后组数大于m时,说明规定的mid偏小,所以low=mid+1    if(c<=m) return solve(low,mid-1);   }  int main()  {      int sum,max;      while(scanf("%d%d",&n,&m)!=EOF)      {          sum=0;          max=0;          for(int i=0;i<n;++i)           {              scanf("%d",&day[i]);              sum+=day[i];  //分成一组            if(day[i]>max) max=day[i];   //分成n组 //答案在n和1之间,所以最后的ans也在max和sum之间        }           printf("%d\n",solve(max,sum));      }      return 0;  }  
0 0
原创粉丝点击