Monthly Expense解题报告

原创 2012年03月25日 19:22:26

Farmer John is an astounding accounting wizard and has realized he might run out of money to run the farm. He has already calculated and recorded the exact amount of money (1 ≤moneyi ≤ 10,000) that he will need to spend each day over the nextN (1 ≤ N ≤ 100,000) days.

FJ wants to create a budget for a sequential set of exactly M (1 ≤ MN) fiscal periods called "fajomonths". Each of these fajomonths contains a set of 1 or more consecutive days. Every day is contained in exactly one fajomonth.

FJ's goal is to arrange the fajomonths so as to minimize the expenses of the fajomonth with the highest spending and thus determine his monthly spending limit.

Input

Line 1: Two space-separated integers: N andM
Lines 2..N+1: Line i+1 contains the number of dollars Farmer John spends on theith day

Output

Line 1: The smallest possible monthly limit Farmer John can afford to live with.

Sample Input

7 5
100
400
300
100
500
101
400

Sample Output

500

Hint

If Farmer John schedules the months so that the first two days are a month, the third and fourth are a month, and the last three are their own months, he spends at most $500 in any month. Any other method of scheduling gives a larger minimum monthly limit.
#include<iostream>
using namespace std;
const int MaxD=100001;
int Cost[MaxD],N,M;

int fun (const int x)  //算法实现。
{
	int s=0,m=0;
    for(int i=0;i<N;++i)
	{
		if(s+Cost[i]<=x)
			s+=Cost[i];
		else
            ++m,s=Cost[i];
	}
	return ++m;
}

int main()
{
	int max=-1,sum=0;
	scanf("%d %d",&N,&M);
	for(int i=0;i<N;++i)
	{
	    scanf("%d",&Cost[i]);
        if(Cost[i]>max)
			max=Cost[i];  //找出最大的月收入。
		sum+=Cost[i];      //算出总收入。
	}
     int left=max,right=sum,mia,k,ans;  //max<=x<=sum;x为二分查找对象。
	 while(left<=right)   //不断缩小范围。
	 {
		 mia=(left+right)/2; //中间值。
         k=fun(mia);  //返回数 和m 比较,小于m,缩小x,即right-1;否则增大x,即left+1;
		 if(k<=M)
		 {
			 right=mia-1;
		     ans=mia;
		 }
		 else
			 left=mia+1;
	 }
printf("%d\n",ans);
 return 0;
}

Monthly Expense+POJ+典型的二分答案

Monthly Expense Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submi...
  • u012870383
  • u012870383
  • 2014年08月01日 00:16
  • 605

poj-3273 Monthly Expense (二分)

题意:一共有n天的消费情况,让你分成m段,使得这m段都尽量的小,最后输出最大的那段的值。 思路:直接二分枚举一段里的值,每举出一个就来检测在该值下连续分段分出的段数,如果段数大那么答案需要大于该值,...
  • chAngE_AC
  • chAngE_AC
  • 2016年02月27日 14:44
  • 300

Monthly Expense(二分查找)

Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17982 Accep...
  • huayunhualuo
  • huayunhualuo
  • 2015年08月23日 14:04
  • 364

Monthly Expense

Problem Description Farmer John is an astounding accounting wizard and has realized he might ru...
  • a997930294
  • a997930294
  • 2014年08月19日 21:02
  • 1153

Monthly Expense解题报告

这是一个经典的二分方法求最大值最小问题; 原题如下: Monthly Expense Time Limit: 2000 MS Memory Limit: 65536 KB ...
  • codeacm
  • codeacm
  • 2015年11月26日 17:22
  • 155

POJ3273:Monthly Expense(二分)

Description Farmer John is an astounding accounting wizard and has realized he might run out of m...
  • libin56842
  • libin56842
  • 2013年12月08日 20:02
  • 3084

Monthly Expense poj3273 (二分/最大值最小化)

Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24044   Accepted:...
  • Gentle_Guan
  • Gentle_Guan
  • 2017年01月17日 09:47
  • 293

POJ 3272 Monthly Expense 二分

来源:http://poj.org/problem?id=3273 题意:给你n个数,让分成m组,每组必须是连续的一些数,求每组的和的最大值最小。 思路:二分枚举答案。上界是n个数的和,也就是分成...
  • wmn_wmn
  • wmn_wmn
  • 2012年09月03日 08:30
  • 1948

poj 3273 Monthly Expense

Description Farmer John is an astounding accounting wizard and has realized he might run out of mon...
  • u010650359
  • u010650359
  • 2013年09月21日 17:30
  • 1430

【POJ】3273 - Monthly Expense(二分)

点击打开题目 Monthly Expense Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 21764  ...
  • wyg1997
  • wyg1997
  • 2016年07月18日 09:50
  • 148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Monthly Expense解题报告
举报原因:
原因补充:

(最多只允许输入30个字)