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为正整数的数量. ...
随机推荐
- asp.net5开发中DNX SDK版本的影响
某次asp.net5开发中遇到了一个很奇怪的问题,引用部分的nuget包没有显示任何错误,如下图: 但是编译时出现了几百个错误: 错误基本都是形如“CS0246 The type or namespa ...
- 从零开始的全栈工程师——js篇2.11(原型)
原型 原型分析 1.每个 函数数据类型(普通函数,类)都有一个prototype属性 并且这个属性是一个对象数据类型2.每个Prototype上都有一个constructor属性 并且这个属性值是当前 ...
- 学习《CSS选择器Level-4》不完全版
1 概述 1.1 前言 选择器是CSS的核心组件.本文依据W3C的Selectors Level 4规范,概括总结了Level1-Level4中绝大多数的选择器,并做了简单的语法说明及示例演示.希望对 ...
- $(formName).data(“bootstrapValidator”).getFieldElements('fieldName'); 校验单个字段
问题也出自于业务系统后台,应该来说也比较常见吧 房产类型分为一抵和二抵,二抵的时候用户必须填写一抵债权金额,一抵的时候则不显示一抵债权金额也不校验,因为我所有的校验都是写在标签上,哪些必填直接写在标签 ...
- Cypress测试工具
参考博客: https://testerhome.com/articles/19035 最近一段时间学习了cypress的测试工具, 她是一个端到端的测试web工具. 环境准备 1.工具:vs co ...
- 《Python高效开发实战》实战演练——开发Django站点1
6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1 建立项目 在进行D ...
- Kyligence Analytics Platform Enterprise
平台: arm 类型: ARM 模板 软件包: kap 2.3 kyanalyzer 2.3 apache kylin basic software bi big data cube data war ...
- JS中的异常exception
js提供了一套异常处理机制.异常是干扰程序的正常流程的不寻常事故,当发生这样的事故时,你的程序应该抛出一个异常 try_it() { try { console.log(add("1&quo ...
- #linux 命令使用 cp -未完结版
下载了sublime 解压之后,想把文件夹放到opt目录,这里用命令cp将其复制过来 johnny@johnny-pc:~$ sudo cp -r ~/下载/Sublime_2.0.2 /opt/ [ ...
- UVA Live Archive 4394 String painter(区间dp)
区间dp,两个str一起考虑很难转移. 看了别人题解以后才知道是做两次dp. dp1.str1最坏情况下和str2完全不相同,相当于从空白串开始刷. 对于一个区间,有两种刷法,一起刷,或者分开来刷. ...