博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【TYVJ】1359 - 收入计划(二分)
阅读量:5989 次
发布时间:2019-06-20

本文共 2041 字,大约阅读时间需要 6 分钟。

一开始是一眼看出是二分的,因为这里有单调性,因为取钱是一次取完并且是连续的。

所以最优取法就是准备达到某个价值再取。最优里边包含了次优,也就是取不到m次我就能取完就一定能够取m次能够取完,只要在取法那里随便取就行了,保证不超过这个某个价值

于是我们可以二分这个价值,看看能不能最优法取完并且次数小于m。

#include 
#include
#include
#include
#include
#include
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
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 5 100 400 300 100 500 101 400

样例输出 SampleOutput []

500

数据范围和注释 Hint

【样例说明】

    采取下面的方案可以使每次领到的工资不会多于500。这个答案不能再少了。
100 400   300 100   500   101   400   每一天的薪水
<------1 <-------2 <---3 <---4 <---5  领取工资的时间
  500       400     500   101   400   领取到的工资

转载地址:http://uunlx.baihongyu.com/

你可能感兴趣的文章
vs 2012不能发布程序的问题
查看>>
JQuery常用功能的性能优化
查看>>
windowXP下搭建nginx和tomcat的集群
查看>>
学习笔记---Ubuntu学习的相关知识
查看>>
利用DBMS_STATS包修改统计信息,欺骗优化器,生成糟糕的执行计划
查看>>
Linux 用户管理命令
查看>>
【Case分享】Exchange 2013登录EAC\OWA出现HTTP 500内部错误
查看>>
c++利用SqlApi访问SqlServer数据库(存储过程篇)
查看>>
RHEL/CentOS/OEL5/6.x高危漏洞修补
查看>>
CentOS7安装配置SAMBA服务器
查看>>
java将固定长度的byte数组转成String,并去掉后面多余的0
查看>>
Centos7安装Python3.7(兼容Python2.7)
查看>>
每日一笑图
查看>>
redhat下的磁盘操作-分区,格式化,挂载等
查看>>
全局变量相互依赖和初始化顺序的解决办法
查看>>
LAMP搭建14:Apache禁止解析PHP
查看>>
支付宝支付-手机网站支付接口(H5手机站)
查看>>
Android Web Server
查看>>
MAVEN插件积累
查看>>
我的友情链接
查看>>