这道题是典型的二分答案法。但是首先难道这道题的时候我进行了一系列的思考,甚至联想到了之前多校中类似于树状划分的问题。。。原因是大家都包括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 二分答案的更多相关文章

  1. 51nod 1007 正整数分组【01背包变形】

    1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 ...

  2. 51Nod 1007 正整数分组 -简单DP

    题意: 将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. N<=100 sum<=100 ...

  3. 51nod 1007 正整数分组

    将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.   Input 第1行:一个数N,N为正整数的数量 ...

  4. 51Nod 1007 正整数分组 01背包

    将一堆正整数分为2组,要求2组的和相差最小.例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.Input第1行:一个数N,N为正整数的数量.第2 - ...

  5. 2018.10.02 NOIP模拟 矩阵分组(二分答案)

    传送门 考场上并不会写二分的check函数,下来看了看题解发现真是妙极. 不难想到每次直接从四个角各按阶梯状拓展出合法区域A,再检验B是否合法就行了.(然而考场上写的弃疗了) 于是题解用了一些小技巧优 ...

  6. [51nod] 1007 正整数分组 dp

    将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.   Input 第1行:一个数N,N为正整数的数量 ...

  7. (DP)51NOD 1007正整数分组

    将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的.   输入 第1行:一个数N,N为正整数的数量. 第 ...

  8. 51nod1128 正整数分组V2

    [题解] 二分一个最大值,check一下分出来的组数是否小于等于k即可. #include<cstdio> #include<algorithm> #define LL lon ...

  9. 51Nod 1007 正整数分组(01背包)

    将一堆正整数分为2组,要求2组的和相差最小. 例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的. Input 第1行:一个数N,N为正整数的数量. ...

随机推荐

  1. [COGS 347]地震

    时间限制:4 s   内存限制:128 MB 问题描述 某国地形狭长,中部有一列山脉,由于多发地震,山脉在不断变化中.地震发生时,山脉有可能发生如下变化:局部海拔升高或降低,板块运动产生地裂而出现一段 ...

  2. Golang自带的http包的路由规则问题

    1.调用下面的方法开启一个http监听服务http.HandleFunc("/hello/", helloHandler)err := http.ListenAndServe(&q ...

  3. SQL 分页实现

    --通用分页 ALTER PROCEDURE [dbo].[Sys_Pagination_1] @tblName VARCHAR(2000) , -- 表名 @strGetFields VARCHAR ...

  4. sublime 常用快捷键(转)

    Sublime text 3是码农最喜欢的代码编辑器,每天和代码打交道,必先利其器,掌握基本的代码编辑器的快捷键,能让你打码更有效率.刚开始可能有些生疏,只要花一两个星期坚持使用并熟悉这些常用的快捷键 ...

  5. Day4 HTML新增元素与CSS布局

    Day4  HTML新增元素与CSS布局 HTML新增属性: 一:常见的布局标签(都是块级元素) <header>头部</header> <nav>导航</n ...

  6. python基本数据类型,int,bool,str

    一丶python基本数据类型 1.int 整数,主要用来进行数学运算. 2.str 字符串,可以保存少量数据并进行相应的操作 3.bool 判断真假.True.False 4.list 存储大量数据, ...

  7. es6-异步应用

    异步编程对 JavaScript 语言太重要.Javascript 语言的执行环境是“单线程”的,如果没有异步编程,根本没法用,非卡死不可.本章主要介绍 Generator 函数如何完成异步操作. 传 ...

  8. js的内联和外部调用

    如上代码(实现轮播图的部分代码),若以内联形式写在html里,就不会出现异常.但是如果放在外部js文件中,并在html的head中调用,就会出现异常(不报错,但是轮播逻辑出现异常). 解决:不使用全局 ...

  9. notepad++ 等用正则表达式自动添加sql引号(宏)

    一般sql语句会经常用到给括号里的内容添加引号,sql如下 Select * From Test ', ', ', ', ', '); 一开始参考了http://blog.sina.com.cn/s/ ...

  10. windows 右键崩溃 解决方法

    [问题描述] 选中一个文件,右键之后无法弹出菜单,最后显示: 资源管理器未响应. [参考方法] https://www.jianshu.com/p/d627c941467a [方法介绍] 1.下载Sh ...