信息学奥赛一本通T1436-数列分段II (二分)
信息学奥赛一本通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 (二分)相关推荐
- 数列分段II(信息学奥赛一本通-T1436)
[题目描述] 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: ...
- 信息学奥赛一本通 1051:分段函数 | OpenJudge NOI 1.4 13
[题目链接] ybt 1051:分段函数 OpenJudge NOI 1.4 13:分段函数 [题目考点] 1. if-else if-else语句 2. 判断数字是否在某区间内 判断数x是否满足a& ...
- 信息学奥赛一本通 提高篇 第一部分 基础算法 第2章 二分与三分
信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分 信息学奥赛一本通 提高篇 提高版 第一部分 基础算法 第2章 二分与三分_mrcrack的博客-CSDN博客_信息学奥赛一本通 ...
- 《信息学奥赛一本通》提高版题单
第一部分 基础算法 第 1 章 贪心算法 #10000 「一本通 1.1 例 1」活动安排 #10001 「一本通 1.1 例 2」种树 #10002 「一本通 1.1 例 3」喷水装置 #10003 ...
- 信息学奥赛一本通在线提交地址
信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
- 信息学奥赛一本通 提高篇 第5章 矩阵乘法
例1 矩阵AXB 信息学奥赛一本通(C++版)在线评测系统 [矩阵乘法]矩阵A×B_Uletay-CSDN博客 矩阵乘法--矩阵A×B_vina的博客-CSDN博客 一本通1641[例 1]矩阵 A× ...
- 《信息学奥赛一本通提高篇》第6章 组合数学
例1 计算系数(NOIP2011提高) 信息学奥赛一本通(C++版)在线评测系统 NOIP2011计算系数_nanhan27的博客-CSDN博客 「NOIP2011」 计算系数 - 组合数_TbYan ...
- 《信息学奥赛一本通 提高篇》
提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1章 贪心算法_青少年趣味编程-CSDN博客 提高篇 第一部分 基础算法 第1章 贪心算法 提高篇 第一部分 基础算法 第1 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
最新文章
- python数字计算公式_Python中数字以及算数运算符的相关使用
- Docker 集群 图形化显示 Visualizer
- python常用函数表-python-列表常用函数
- python 知识点记录二
- 详解公用表表达式(CTE)
- Redis 6.0 新特性 ACL 介绍
- python中的self含义及使用方法
- Kafka : 报错 KafkaController NoSuchElementException : : key not found : [xxx]
- python中function函数的用法_Python中Function(函数)和methon(方法)
- 2021-2025年中国再加工医疗器械行业市场供需与战略研究报告
- java recordset_连接数据库返回recordset
- Doris之故障恢复(重点)
- 编译Android指定JDK/OpenJdk版本
- 【MINI2440】linux系统下载全流程
- 计算机键盘芯片,电脑键盘芯片详解中文.pdf
- 2×3卡方检验prism_SPSS之卡方检验
- Mybatis 新增返回ID
- mysql 连续打卡天数_Sql如何统计连续打卡天数
- POJ 2706 Connect
- PAT乙级——1034(模拟四则运算)
热门文章
- 从多个文档在Word 2010中创建主文档
- linux系统支持网银吗,我彻底方了!Linux下竟然也能使用网银?(图)
- 计算机剪切全选快捷键,全选快捷键是什么
- 电脑参数,台式电脑怎么查看配置参数|如何查询台式机硬件配置
- C-V2X 网络层及适配层解析填充
- html5小猫钓鱼游戏思路,小猫钓鱼的游戏算法
- cad 打开硬件加速卡_Win10系统运行CAD不流畅解决方法
- SpringCloud-SpringCloud Bus服务总线的介绍(Day9)
- Oracle函数保留两位小数
- 2013 中国15大云平台