51NOD 1128正整数分组V2 二分答案
这道题是典型的二分答案法。但是首先难道这道题的时候我进行了一系列的思考,甚至联想到了之前多校中类似于树状划分的问题。。。原因是大家都包括N各节点K个输入。。
实际上最开始联想到了应当使用二分法“枚举”正确答案,但是实际上手的时候却没有想到应当怎么处理是否大于的反馈问题。。。甚至都没有很好的定义区间的含义。。。对于如何分配最大值的取值甚至开始构思背包问题的解决方案,试图匡算时间复杂度。。。。
然而。。。。万万没想到。。。。这TM是连续的。。。。意味着可以直接使用贪心来判断是否合法,用进行玩划分之后的剩余集合的数量来进行进行反馈——多了还是少了
在构造二分函数的时候应当注意:此时的语境是:“在合法区间内选择最小的” 与此同时 使用二分法搞出来的实际上是“合法和非法区间的交界线”,如果返回A就是非法区间的最后一个,但是返回B就是合法区间的第一个,在这个相对特殊的语境下,应当对函数作适当的返回。
有另外其实lower_bound()和upper_bound()的区别有点类似与上述的场景。。。。
然而。。。。突然发祥之前给队友讲错了。。。赶紧去纠正了下、
放上AC代码:
#include<bits/stdc++.h>
using namespace std;
const long long MAXN=;
long long a[MAXN];
long long k,n;
long long h=; void init()
{
cin>>n>>k;
for(int i=;i<n;++i)
{
cin>>a[i];
h+=a[i];
}
}
long long com(long long key)
{
long long summ=;
long long kk=k;
for(int i=;i<n;++i)
{
if(summ+a[i]>key)summ=a[i],kk--;
else summ+=a[i];
}
return kk;
}
long long bin_search(long long a,long long b)
{ if(a==b-)return b;
long long mid=(a+b)/;
// cout<<a<<ends<<b<<ends<<com(mid)<<endl;
if(com(mid)<=)return bin_search(mid,b);
else return bin_search(a,mid);
}
int main()
{
cin.sync_with_stdio(false);
init();
cout<<bin_search(,h);
return ;
}
51NOD 1128正整数分组V2 二分答案的更多相关文章
- 51nod 1007 正整数分组【01背包变形】
1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 ...
- 51Nod 1007 正整数分组 -简单DP
题意: 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. N<=100 sum<=100 ...
- 51nod 1007 正整数分组
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量 ...
- 51Nod 1007 正整数分组 01背包
将一堆正整数分为2组,要求2组的和相差最小.例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.Input第1行:一个数N,N为正整数的数量.第2 - ...
- 2018.10.02 NOIP模拟 矩阵分组(二分答案)
传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优 ...
- [51nod] 1007 正整数分组 dp
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量 ...
- (DP)51NOD 1007正整数分组
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. 输入 第1行:一个数N,N为正整数的数量. 第 ...
- 51nod1128 正整数分组V2
[题解] 二分一个最大值,check一下分出来的组数是否小于等于k即可. #include<cstdio> #include<algorithm> #define LL lon ...
- 51Nod 1007 正整数分组(01背包)
将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. ...
随机推荐
- ace admin 左侧菜单定位
后台模版来自:Ace Admin http://ace.jeka.by/form-elements.html 左侧菜单,通过js根据url来判断显示哪块 window.location.pathnam ...
- win8.1x64下完美运行IE6
IE6我相信是所有前端人员永远都绕不过去的坎,操作的版本越来越高,离xp越来越远,难道你还在win8下安装个虚拟机来运行IE6吗?这样即消耗系统资源,来回的切换也麻烦,关键是只为了一个测试哦,没必要这 ...
- 《C#高效编程》读书笔记04-使用Conditional特性而不是#if条件编译
#if/#endif语句常用来基于同一份源代码生成不同的编译结果,其中最常见的就是debug版和release版.但是这在实际应用中并不是非常友好,因为它们容易被滥用,其代码也难以理解或调试. C#为 ...
- css盒子模型 css3盒子相关样式
1.内边距(内边距在content外,边框内) 内边距属性: padding 设置所有边距 padding-bottom 底边距 padding-left ...
- 如何下载最新的固件到Pixhawk
连接Pixhawk至电脑 当Mission Planner 已经安装至你的电脑上,使用micro USB数据线连接pixhawk到您的计算机上. 使用一个USB端口直接在您的计算机上,不要用USB集线 ...
- Miner3D Enterprise 企业版
——极致的视觉数据挖掘和知识发现解 Miner3D Enterprise 企业版是一个有力的综合数据驱动的三维可视化和数据分析解决方案.金融师.药剂师.生物技术或化学材质科研人员.地质学家.石油开采专 ...
- 几幅手稿讲解CNN
学习深度神经网络方面的算法已经有一段时间了,对目前比较经典的模型也有了一些了解.这种曾经一度低迷的方法现在已经吸引了很多领域的目光,在几年前仅仅存在于研究者想象中的应用,近几年也相继被深度学习方法实现 ...
- 【extjs6学习笔记】1.10 初始: 定义类
http://www.extjs-tutorial.com/extjs/define-new-class-in-extjs
- /pentest/cisco/cisco-auditing-tool
/pentest/cisco/cisco-auditing-tool ./CAT -h host 扫描单个主机 -w wordlist 猜测团体名称列表 -a passlist 猜测密码列 ...
- ASP.NET中 前后台方法的相互调用
后台调用前台js方法: this.Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "ShowM ...