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 ...
随机推荐
- javascript使用技巧总结,不断更新...
1.使用a标签来获得当前页面相对地址的绝对地址 function getAbsoluteUrl(url){ var a; if(!a) a = document.createElement('a'); ...
- 293. Flip Game只翻转一步的加减号翻转游戏
[抄题]: You are playing the following Flip Game with your friend: Given a string that contains only th ...
- 数据库sql 开窗函数
--本文采用Oracle数据库测试,前4个查询为一组,后2个查询为一组,每组前面的查询是为了推出最后的查询 --创建表,为了简化处理,字段类型都采用varcharcreate table tb_sc( ...
- matplotlib的颜色和控制条
为了方便记忆,收藏备用 一 linestyle '-' solid line style '--' dashed line style '-.' dash-dot line style ':' dot ...
- Bean管理注解的例子
- jqgrid 编辑表格(包含下拉框)
.1在jqgrid 按钮 <asp:JQGridColumn TextAlign=" DataField="act" Visible="True" ...
- Python基础-2
目录: 1.列表.元组操作 2.字符串操作 3.字典操作 4.集合操作 5.文件操作 6.字符编码与转码 一.列表.元组操作 定义列表 names = ['Freeman',"Jack&qu ...
- Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications
January 2014 Containing twenty-four design patterns and ten related guidance topics, this guide arti ...
- Position Independent Code (PIC) in shared libraries
E原文地址:http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/下一文: ...
- OM Responsibility Flow