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 ...
随机推荐
- C#连接Mysql数据库 MysqlHelper.cs文件
mysql.data.dll下载_c#连接mysql必要插件mysql.data.dll是C#操作MYSQL的驱动文件,是c#连接mysql必要插件,使c#语言更简洁的操作mysql数据库.当你的电脑 ...
- 409. Longest Palindrome 最长对称串
[抄题]: Given a string which consists of lowercase or uppercase letters, find the length of the longes ...
- Mpich编程
一.简介 通过安装MPICH构建MPI编程环境,从而进行并行程序的开发.MPICH是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行 ...
- Python pip命令
一.简介 pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.distribute是setuptools的取代(Setuptools包后期不再维护了),p ...
- win32多线程 (一) 线程创建与结束等待
#include "stdafx.h"#include <Windows.h>#include <iostream> using namespace std ...
- 专题1-MMU-lesson3-MMU配置与使用
1.段方式MMU 利用虚拟地址然后找到物理地址,通过物理地址访问到led,其过程如下: 一个段的大小是[19:0]总共有1M的地址空间. 从上面可知对应GPIO的段物理基地址是0x7f000000.那 ...
- YDNJS(上卷):this 的绑定对象
函数中的 this 是在调用时被绑定的,this 指向谁完全取决于函数的调用位置. 确定 this 的绑定对象的方式有 4 种. 默认绑定 默认绑定就是将函数中的 this 绑定给了全局对象 wind ...
- 使用JMeter测试基于WebSocket协议的服务
使用JMeter测试基于WebSocket协议的服务 :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba( ...
- SharePoint 2013在浏览器中打开pdf文档
在没有安装Office Web Apps的情况下,SharePoint 2013是支持在IE上直接打开pdf和Excel文档的(只能查看,不能编辑,部分Excel会报错). 当然,需要现在管理中心做一 ...
- Backup--查看备份的历史记录
--==================================================== --查看数据库备份的详细信息:时间存储地址最大/最小LSN SELECT * FROM m ...