【TYVJ】1359 - 收入计划(二分)
http://tyvj.cn/Problem_Show.aspx?id=1359
一开始是一眼看出是二分的,因为这里有单调性,因为取钱是一次取完并且是连续的。
所以最优取法就是准备达到某个价值再取。最优里边包含了次优,也就是取不到m次我就能取完就一定能够取m次能够取完,只要在取法那里随便取就行了,保证不超过这个某个价值
于是我们可以二分这个价值,看看能不能最优法取完并且次数小于m。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; }const int N=100005;
int n, m, a[N];inline const bool check(const int &x) {int sum=0, t=0, i;for(i=1; i<=n; ++i) {sum+=a[i];if(sum>x) sum=a[i], ++t;if(t>=m) return 0; //这里要注意,因为此时一定还有没取完的,所以==m的时候就要退出了}return 1;
}int main() {read(n); read(m);int mx=0, sum=0;for1(i, 1, n) { read(a[i]); mx=max(mx, a[i]); sum+=a[i]; }int l=mx, r=sum, mid;while(l<=r) {mid=(l+r)>>1;if(check(mid)) r=mid-1;else l=mid+1;}print(r+1);return 0;
}
因为范围很大,所以我们二分的范围要适当做点技巧。
描述 Description
高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱。从今天起,Matrix67将连续工作N天(1<=N& lt;=100 000)。每一天末他可以领取当天及前面若干天里没有领取的工资,但他总共只有M(1<=M<=N)次领取工资的机会。 Matrix67已经知道了在接下来的这N天里每一天他可以赚多少钱。为了避免自己滥用零花钱,他希望知道如何安排领取工资的时间才能使得领到工资最多的 那一次工资数额最小。注意Matrix67必须恰好领工资M次,且需要将所有的工资全部领走(即最后一天末需要领一次工资)。
输入格式 InputFormat
第一行输入两个用空格隔开的正整数N和M
以下N行每行一个不超过10000正整数,依次表示每一天的薪水。
输出格式 OutputFormat
输出领取到的工资的最大值最小是多少。
样例输入 SampleInput [复制数据]
7 5100400300100500101400
样例输出 SampleOutput [复制数据]
500
数据范围和注释 Hint
【样例说明】
采取下面的方案可以使每次领到的工资不会多于500。这个答案不能再少了。
100 400 300 100 500 101 400 每一天的薪水
<------1 <-------2 <---3 <---4 <---5 领取工资的时间
500 400 500 101 400 领取到的工资
【TYVJ】1359 - 收入计划(二分)相关推荐
- COGS 827. [Tyvj Feb11] 网站计划
输入文件:web.in 输出文件:web.out 简单对比 时间限制:1 s 内存限制:128 MB 描述 Description Tyvj的Admin--zhq同学将在寒假开始实 ...
- luogu P2680 运输计划 (二分答案+树上差分)
题目背景 公元 20442044 年,人类进入了宇宙纪元. 题目描述 公元20442044 年,人类进入了宇宙纪元. L 国有 nn 个星球,还有 n-1n−1 条双向航道,每条航道建立在两个星球之间 ...
- Tyvj 1599 锻炼计划
题目: 锻炼计划 来源: Tyvj 1599 题目大意: 给定M个计划和初始体力N,每项计划中会损耗体力,每秒会增加1体力,求是否会 累死,输出何时累死,若没事则输出最后的体力.一天1440分钟 数 ...
- 王健林的新“小目标”:2018年计划收入2479亿元
价值君注:1月21日消息,万达董事长王健林日前对外发布2017年年度工作总结,称全面完成工作目标,2018年万达集团计划收入2479亿元,加快万达广场发展速度,持续不断企业转型,并加快线上线下融合发展 ...
- cogs2109 [NOIP2015] 运输计划
cogs2109 [NOIP2015] 运输计划 二分答案+树上差分. STO链剖巨佬们我不会(太虚伪了吧 首先二分一个答案,下界为0,上界为max{路径长度}. 然后判断一个答案是否可行,这里用到树 ...
- 自动化面试问题及答案_普遍的基本收入是自动化的答案
自动化面试问题及答案 It would be strange for people to hear that Milton Friedman, one of the greatest and well ...
- 闲人闲谈PS之三十一——新收入准则中的合同损失计提
惯例闲话:新收入准则出来已经3年多,闲人也走访了很多工程企业的应用情况,推广情况不太乐观,多数企业还是沿用以前的方式记账,甚至还有不用工程施工科目,用生产制造科目体系,多见于装备制造行业,实际上如果是 ...
- 岭南师范学院专插本计算机,2020年岭南师范学院专插本招生计划出来了,共招250人...
2020年岭南师范学院专插本招生计划是多少?岭南师范学院教务处公布了2020年该院校专插本拟招生计划,10个专业共250人.以下是易学仕小编为大家整理的相关内容,供2020年广东专插本考生查看. 20 ...
- 游戏收入模型_什么是收入模型
游戏收入模型 什么是收入模型? (What is a Revenue Model?) A Revenue Model is the method or a business strategy whic ...
最新文章
- session对象不创建会有吗_相亲对象木讷无聊,想找个不无趣的男人这么难吗?...
- MongoDB-JAVA-Driver 3.2版本常用代码全整理(4) - 地理空间索引
- 需求分析的20条法则
- 清华大学 计算机 林伟,研究人员
- Win32ASM学习[8]: 进制转换的库函数
- LeetCode 457. 环形数组循环(暴力+快慢指针)
- 探秘蚂蚁金服分布式事务 Seata 的AT、Saga和TCC模式
- 分布式锁实现原理与最佳实践
- 每个人都该知道的数字
- mysql〉_MySql 基础知识-常用命令及sql语句
- 团队成员的分应该怎么分?
- 自如蛋壳被指推高房租背后:爱公寓资金链断裂先例需警醒
- 如何在 NVIDIA GPU、CUDA 和 cuDNN 中使用 OpenCV 的“dnn”模块
- 芯烨Xprinter XP-F260H 打印机驱动
- 怎么推广“外卖CPS项目”赚佣金?(饿了么美团外卖红包小程序搭建教程)
- zabbix使用详解
- 迪赛智慧数——其他图表(平行坐标图):2001 VS 2020主要城市房价及涨幅
- 高中英语话题阅读 计算机,高中英语必修二Unit 3 Computers阅读课的教学设计
- java打印pdf_java操作打印机打印pdf文件
- CPU检测工具:CPU-Z快捷键大全(绿色)