OJ 21658::Monthly Expense(二分搜索+最小化最大值)
Description
Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的。他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi(1<=moneyi<=10,000),他想要为他连续的M(1<=M<=N)个被叫做“清算月”的结帐时期做一个预算,每一个“清算月”包含一个工作日或更多连续的工作日,每一个工作日都仅被包含在一个“清算月”当中。 FJ的目标是安排这些“清算月”,使得每个清算月的花费中最大的那个花费达到最小,从而来决定他的月度支出限制。
Input
第一行:两个用空格隔开的整数:N和M
第2..N+1行:第i+1行包含FJ在他的第i个工作日的花费
Output
第一行:能够维持每个月农场正常运转的钱数
题解:
M<=N,如果分成<M个清算月满足要求,那么也可以分成M个清算月。
最大值最小,考虑二分。
二分一个ans。
然后模拟一下每一天尽量把钱用完,
得到一个需要的清算月数目cnt。
若cnt<=M合法,否则不合法。
思路:我们可以直到这个值必然在所有数中最大值与所有数的总和之间,那么只要再这个区间进行二分即可
AC 代码:这是一个可能超时的代码
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m;
int a[];
bool mmp(int mid)
{
int sum=;
int ans=;
for(int i=;i<=n;i++)
{
if(sum+a[i]<=mid)
sum+=a[i];
else
{
sum=a[i];
ans++;
}
}
if(ans > m)
return ; return ;
}
int main()
{ int tail,head,mid;
while(scanf("%d%d",&n,&m)!=EOF)
{
tail=,head=;
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
tail+=a[i];
head=max(head,a[i]);
} mid=(head+tail)/;
while(tail>=head)
{
if(mmp(mid)==)
head=mid+;
else
tail=mid-; mid=(head+tail)/;
}
printf("%d\n",mid+);
}
}
下面这是进行了一些剪支
#include <iostream>
#include <cstdio>
#define maxn 100005
using namespace std;
int cost[maxn];
int n,m;
bool judge(int x)
{ //用来判断按当前二分值作为题目要求的最大值,所分出的堆是否合理。<br>{
int s=,t=;
for (int i=;i<n;i++)
{
if (cost[i]>x) return false;///高妙之处剪枝
if (s+cost[i]>x)
{
if (t>=m-) return false;///剪枝
t++;
s=cost[i];
}
else
s+=cost[i];
}
return true;
}
int binary(int maxx,int sum) //二分部分
{
int mid,left=maxx,right=sum;
while (left<right)
{
mid=left+(right-left)/;
if (!judge(mid)) left=mid+;
else
right=mid;
}
return left;
}
int main()
{
int maxx=;//二分的下界
int sum=;//二分的上界
scanf("%d%d",&n,&m);
for (int i=;i<n;i++)
{
scanf("%d",&cost[i]);
maxx=max(maxx,cost[i]);
sum+=cost[i];
}
printf("%d\n",binary(maxx,sum));
return ;
}
题后感:好好学习下什么是最小化最大值与最大化最小值吧
OJ 21658::Monthly Expense(二分搜索+最小化最大值)的更多相关文章
- poj 3273"Monthly Expense"(二分搜索+最小化最大值)
传送门 https://www.cnblogs.com/violet-acmer/p/9793209.html 题意: 有 N 天,第 i 天会有 a[ i ] 的花费: 将这 N 天分成 M 份,每 ...
- poj 3273 Monthly Expense (二分搜索,最小化最大值)
题目:http://poj.org/problem?id=3273 思路:通过定义一个函数bool can(int mid):=划分后最大段和小于等于mid(即划分后所有段和都小于等于mid) 这样我 ...
- Monthly Expense(二分--最小化最大值)
Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...
- POJ3273-Monthly Expense (最小化最大值)
题目链接:cid=80117#problem/E">click here~~ [题目大意] 农夫JF在n天中每天的花费,要求把这n天分作m组.每组的天数必定是连续的.要求分得各组的花费 ...
- POJ_3273_Monthly_Expense_(二分,最小化最大值)
描述 http://poj.org/problem?id=3273 共n个月,给出每个月的开销.将n个月划分成m个时间段,求m个时间段中开销最大的时间段的最小开销值. Monthly Expense ...
- POJ_3104_Drying_(二分,最小化最大值)
描述 http://poj.org/problem?id=3104 n件衣服,第i件衣服里面有水a[i],自然风干每分钟干1个水,用吹风机每分钟干k个水,但是同时只能对一件衣服使用吹风机,求干完所有衣 ...
- POJ 3273 Monthly Expense二分查找[最小化最大值问题]
POJ 3273 Monthly Expense二分查找(最大值最小化问题) 题目:Monthly Expense Description Farmer John is an astounding a ...
- [ACM] POJ 3273 Monthly Expense (二分解决最小化最大值)
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14158 Accepted: 5697 ...
- 第十四届华中科技大学程序设计竞赛 K Walking in the Forest【二分答案/最小化最大值】
链接:https://www.nowcoder.com/acm/contest/106/K 来源:牛客网 题目描述 It's universally acknowledged that there'r ...
随机推荐
- cocos2d-x 在vs2010下的搭建(win7系统)
1从官网下载cocos2d-x2.1.3的源码地址如下: http://cocos2d-x.org/ 2.解压下载的软件包我们会发现红框中vs2010的项目文件双击打开它 3.打开后我们要生成一些wi ...
- Centos里没有lsb_release
查看Centos操作系统版本,输入指令 lsb_release -a 报无此命令 解决办法,安装lsb_release 1.执行指令:yum install -y redhat-lsb 2.安装完毕后 ...
- Java生产者消费者问题
1. package interview.thread; import java.util.LinkedList; import java.util.Queue; import org.apache. ...
- swift基本运算
swift运算有单目运算,双目运算和三元运算 1:赋值操作 iX = iY//iX is 8 元组赋值 let (iX, iY = (, ) // iX is 8, iY is 7 和c语言不同的是, ...
- Django框架 之 跨域请求伪造
Django框架 之 跨域请求伪造 浏览目录 同源策略与Jsonp 同源策略 Jsonp jQuery对JSONP的实现 CORS 简介 两种请求 同源策略与Jsonp 同源策略 同源策略(Same ...
- codefirst updatebase
http://blog.csdn.net/dj2008/article/details/23756895 http://blog.csdn.net/gentle_wolf/article/detail ...
- Entity Framework Tutorial Basics(41):Multiple Diagrams
Multiple Diagrams in Entity Framework 5.0 Visual Studio 2012 provides a facility to split the design ...
- Spring MVC 4.2 增加 CORS 支持
转自:http://blog.csdn.net/z69183787/article/details/53102112 Spring MVC 4.2 增加 CORS 支持 跨站 HTTP 请求(Cros ...
- 跨域问题hbuilder
1.借助jquery-jsonp插件 $.jsonp({ url: url, data: { 'name': usd, 'passwd': pass }, callbackParameter: &qu ...
- window7 下配置python2.7+tornado3.3开发环境
玩python的人大都在linux下进行开发,由于长期习惯在windows下开发代码,今天蛋疼尝试在window7下配置python2.7+tornado3.3开发环境,必然的中间遇到各种报错,但是最 ...