ZJNU1682:Farmer Jie—(二分法的应用)

Description

杰哥不仅是一名学霸还是一名农场主,大家都亲切的叫他Farmer Jie,简称FJ。经营农场是一个非常很花钱的事情。

在将来的N天(1<=N<=100000)中FJ每天需要花ai的钱(1<=ai<=10,000)。现在他想把这些天分成M份(每份都是一天或连续的几天),每份的总花费为该份所有天的花费之和,要求如何划分使得M份中最大总花费尽量小。

FJ很懒,所以他向聪明的程序员——你来求助。请帮他算出最优的划分方式,并将其中的最大花费输出。

Input

该题包含多组样例。

第1行:两个用空格隔开的整数:N和M

第2~N+1行:每行包含一个整数ai表示FJ在第i天的花费。

Output

输出最小的最大花费。

Sample Input

 
  
7 5 100 400 300 100 500 101 400

Sample Output

 
  
500

Hint

二分

 

虽说学了二分,但是一开始遇到这道题还是不知道怎么下手。

后来才发现花费肯定是在所有天数中花费的最大值和所有天数的总花费值中的。

所以在这一段区间内进行二分。

#include
#include
#include
#include
using namespace std;
int a[100002];
int max(int a,int b){
	return (a>b?a:b);
}
int main(){
	int n,m,i,j,k,mid,day;
	int sum,amax,q;
	//n天,m份; 
	while(scanf("%d%d",&n,&m)!=EOF){
		sum=0; amax=-1;
		for(i=1;i<=n;i++){
			cin>>a[i];
			sum+=a[i];
			amax=max(amax,a[i]);
		}
		while(amaxmid){
					q=a[i];
					day++;
				}
			}
			//分的太大了; 
			if(day


 

你可能感兴趣的:(二分&&三分)