信息学奥赛一本通T1436-数列分段II

题目链接

对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。

关于最大值最小:

例如一数列4 2 4 5 1要分成3段

将其如下分段:

[4 2][4 5][1]

第一段和为6,第2段和为9,第3段和为1,和最大值为9。

将其如下分段:

[4][2 4][5 1]

第一段和为4,第2段和为6,第3段和为6,和最大值为6。

并且无论如何分段,最大值不会小于6。

所以可以得到要将数列4 2 4 5 1要分成3段,每段和的最大值最小为6。

输入
第1行包含两个正整数N,M,第2行包含N个空格隔开的非负整数A[i],含义如题目所述。
输出
仅包含一个正整数,即每段和最大值最小为多少。
样例输入

5 3
4 2 4 5 1

样例输出

6

经典二分
二分对象:每一段的值
判断条件:我最开始的时候,是想着将数列直接进行分段,分成 m 段,然后对 m 段进行判断,判断是否满足二分答案,但是这样的话,有两个不好解决的问题:1. 如何将数列准确的分成 m 段呢? 2. 对分成的 m 段进行判断,如果判断结果满足二分答案,那么该如何确定是最优解呢?
很显然这两个问题不好解决,于是在看了一下大佬的思路后:用二分答案进行分段,判断所的段数是否满足题目所给的段数,如何大于 m 段,说明二分答案偏小,如果小于等于 m 段,则说明二分答案正确或者二分答案偏大

上代码

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<stack>
#include<queue>
#include<sstream>using namespace std;
typedef long long ll;
const int N = 100010;
const int MOD = 100000007;int n, m;
int p[N];int check(int mid)
{int count = 1, t = 0;for(int i = 0; i < n; i ++ ){if(t + p[i] <= mid) t += p[i];else{count ++ ;t = p[i];}}if(count > m) return 1;else return 0;
}int main()
{cin >> n >> m;int l = 0, r = 0, mid;for(int i = 0; i < n; i ++ ){cin >> p[i];l = max(l, p[i]);r += p[i];}while(l <= r){mid = l + r >> 1;if(check(mid)) l = mid + 1;else r = mid - 1;}cout << r + 1 << endl;return 0;
}

信息学奥赛一本通T1436-数列分段II (二分)相关推荐

  1. 数列分段II(信息学奥赛一本通-T1436)

    [题目描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: ...

  2. 信息学奥赛一本通 1051:分段函数 | OpenJudge NOI 1.4 13

    [题目链接] ybt 1051:分段函数 OpenJudge NOI 1.4 13:分段函数 [题目考点] 1. if-else if-else语句 2. 判断数字是否在某区间内 判断数x是否满足a& ...

  3. 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分

    信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...

  4. 《信息学奥赛一本通》提高版题单

    第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...

  5. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  6. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

  7. 信息学奥赛一本通 提高篇 第5章 矩阵乘法

    例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...

  8. 《信息学奥赛一本通提高篇》第6章 组合数学

    例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...

  9. 《信息学奥赛一本通 提高篇》

    提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...

  10. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

最新文章

  1. python数字计算公式_Python中数字以及算数运算符的相关使用
  2. Docker 集群 图形化显示 Visualizer
  3. python常用函数表-python-列表常用函数
  4. python 知识点记录二
  5. 详解公用表表达式(CTE)
  6. Redis 6.0 新特性 ACL 介绍
  7. python中的self含义及使用方法
  8. Kafka : 报错 KafkaController NoSuchElementException : : key not found : [xxx]
  9. python中function函数的用法_Python中Function(函数)和methon(方法)
  10. 2021-2025年中国再加工医疗器械行业市场供需与战略研究报告
  11. java recordset_连接数据库返回recordset
  12. Doris之故障恢复(重点)
  13. 编译Android指定JDK/OpenJdk版本
  14. 【MINI2440】linux系统下载全流程
  15. 计算机键盘芯片,电脑键盘芯片详解中文.pdf
  16. 2×3卡方检验prism_SPSS之卡方检验
  17. Mybatis 新增返回ID
  18. mysql 连续打卡天数_Sql如何统计连续打卡天数
  19. POJ 2706 Connect
  20. PAT乙级——1034(模拟四则运算)

热门文章

  1. 从多个文档在Word 2010中创建主文档
  2. linux系统支持网银吗,我彻底方了!Linux下竟然也能使用网银?(图)
  3. 计算机剪切全选快捷键,全选快捷键是什么
  4. 电脑参数,台式电脑怎么查看配置参数|如何查询台式机硬件配置
  5. C-V2X 网络层及适配层解析填充
  6. html5小猫钓鱼游戏思路,小猫钓鱼的游戏算法
  7. cad 打开硬件加速卡_Win10系统运行CAD不流畅解决方法
  8. SpringCloud-SpringCloud Bus服务总线的介绍(Day9)
  9. Oracle函数保留两位小数
  10. 2013 中国15大云平台