P1182 数列分段 Section II[贪心,二分详解]

数列分段 Section II

题目描述

对于给定的一个长度为 N N N 的正整数数列 A 1 ∼ N A_{1\sim N} A1N,现要将其分成 M M M M ≤ N M\leq N MN)段,并要求每段连续,且每段和的最大值最小。

关于最大值最小:

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

将其如下分段:

[ 4   2 ] [ 4   5 ] [ 1 ] [4\ 2][4\ 5][1] [4 2][4 5][1]

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

将其如下分段:

[ 4 ] [ 2   4 ] [ 5   1 ] [4][2\ 4][5\ 1] [4][2 4][5 1]

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

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

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

输入格式

1 1 1 行包含两个正整数 N , M N,M N,M

2 2 2 行包含 N N N 个空格隔开的非负整数 A i A_i Ai,含义如题目所述。

输出格式

一个正整数,即每段和最大值最小为多少。

样例 #1

样例输入 #1

5 3
4 2 4 5 1

样例输出 #1

6

提示

对于 20 % 20\% 20% 的数据, N ≤ 10 N\leq 10 N10

对于 40 % 40\% 40% 的数据, N ≤ 1000 N\leq 1000 N1000

对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 1 0 5 1\leq N\leq 10^5 1N105 M ≤ N M\leq N MN A i < 1 0 8 A_i < 10^8 Ai<108, 答案不超过 1 0 9 10^9 109

思路分析:一开始我是这样想的,一直二分往前找数,看看这个数有没有资格成为一个最大值,如果有资格就继续向前走知道找到最小的数为止,不断分组寻找看看能不能成为最大值,后来发现这个不太好实现,这就是贪心的一个过程,因此我们需要换一个思路,看看以某一个数分组的话可以分多少组,如果分的组小于m,那么就说明这个说比较大,往前找:

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int n,m,l,r;
int arr[100005];
bool check(int x)
{
    int sum = 0, num = 0;
    for (int i = 0; i < n; i++)
    {
        if (sum + arr[i] <= x) sum += arr[i];//可以放在一组就放一组
        else sum = arr[i], num++;//否则就新开一个组
    }
    if (num < m)//开的组数太少说明这个极限值太大了,要往前走
        return true;
    else return false;
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
        r += arr[i];
        l = max(l, arr[i]);//为了缩小范围
        //提前规定好l和r
    }
    while (l < r)//开始二分
    {
        int mid = l + r >> 1;
        //因为要求最大值的最小,强调最小取值,因此不必l+r+1
        if (check(mid)) r = mid;//满足某一个条件则答案在左边,即答案是小的
        else l = mid + 1;

    }
    cout << l;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580780.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

smart200 做client,modbus_tcp读取modbus_slave

这里还隐藏一个重要的设置&#xff0c;就是站地址。这个在库函数里。不同plc位置会不一样&#xff0c;我这里是vb1651对应modbus的地址为255&#xff0c;这个值我们可以自己更改&#xff0c;范围为1-247. 打开modbus_slave 软件&#xff0c;

【C#】rdlc报表答应报错:未能加载文件或程序集“Microsoft.SqlServer.Types

文章目录 一、报错信息二、解决方式 一、报错信息 Microsoft.Reporting.WinForms.LocalProcessingException: An error occurred during local report processing. —> Microsoft.Reporting.DefinitionInvalidException: The definition of the report ‘’ is invalid. —&…

sql注入漏洞及其sqlmap工具的使用

一、sql注入的原理 sql注入概念&#xff1a; sql注入主要是将sql语句&#xff0c;插入到web表单提交或者输入域名或者页面请求的查询字符串&#xff0c;最 终 达到一个欺骗服务器执行sql语句的效果。 sql注入的原理&#xff1a;主要分为平台层注入和代码层注入两种原因 …

stm32的GPIO基本结构

1.带FT标号的引脚能容忍5V 2.GPIO系统架构 stm32的所有GPIO都是挂载在APB2总线上的 3.GPIO的基本结构 在上图中&#xff0c;左边就是寄存器&#xff0c;右边就是驱动器了 保护二极管的作用&#xff1a;VDD表示3.3V&#xff0c;如果输入的电压的值大于3.3V&#xff0c;那么这个…

百度网盘某个文件对外开放怎么弄通过密码下载文件对外开放某个文件

百度网盘某个文件对外开放怎么弄通过密码下载文件对外开放某个文件 百度云盘分享文件(创建公开连接)的方法&#xff1a; 1、登录网页&#xff0c;打开百度云盘&#xff0c;并登陆自己的帐号。 2、上传后选择自己需要分享的文件。 选择分享的文件 3、将鼠标放在需要分享的文…

上市企业数字赋能指数数据集-2001到2022年(TF-IDF)

01、数据简介 上市公司数字赋能指数是一个用来衡量上市公司利用数字技术提高业务能力和效率的指标。这个指数反映了上市公司利用大数据、云计算和人工智能等数字技术&#xff0c;高效地利用商业资源和信息&#xff0c;并扩展供应关系的能力。市公司数字赋能指数是一种综合性的…

【Linux】组管理命令

在Linux系统中&#xff0c;组管理是一种重要的权限管理机制&#xff1a; 权限分配的灵活性&#xff1a;通过将用户组织成不同的组&#xff0c;管理员可以更轻松地管理用户的权限。这样&#xff0c;管理员可以根据组的角色或特定任务来分配权限&#xff0c;而不必逐个用户进行设…

大数据时代的引擎:大数据架构随记

大数据架构通常可以分为以下几层&#xff1a; 一、数据采集层 负责从各种数据源采集、清洗、转换、丰富以及格式化数据&#xff0c;可能包括结构化、半结构化和非结构化的数据。 1.1、常用的技术 在大数据领域&#xff0c;数据采集是一个关键的环节&#xff0c;常用的数据采集…

Spring框架宝典:彻底理解三级缓存策略

一、循环依赖概念 在Spring应用中&#xff0c;循环依赖指的是两个或多个Bean之间相互引用&#xff0c;造成了一个环状的依赖关系。举例来说&#xff0c;如果Bean A依赖于Bean B&#xff0c;同时Bean B也依赖于Bean A&#xff0c;就形成了循环依赖。这种情况下&#xff0c;Sprin…

数据库介绍(Mysql安装)

前言 工程师再在存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 一、什么是数据库&#xff1f; 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a; 磁…

【Canvas与艺术】绘制朝鲜国旗

【声明】 该国旗的定位和大小是本人与网上照片比对后估算的&#xff0c;不是精确值。 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <hea…

四信智能化感知与控制方案,助推灌区续建配套与现代化改造建设

“十四五”明确提到推进大中型灌区节水改造和精细化管理&#xff0c;建设节水灌溉骨干工程&#xff0c;同步推进水价综合改革。 灌区是保障国家粮食安全的重要基础性设施&#xff0c;是实施乡村振兴战略的水利支撑。灌区续建配套与现代化改造是实施乡村振兴战略一项重要任务。为…

一套JAVA语言开发的:危大工程智慧一体化工地系统源码,(后台管理端+APP+可视化大屏端)

智慧工地是指利用移动互联、物联网、智能算法、地理信息系统、大数据挖掘分析等信息技术&#xff0c;提高项目现场的“人•机•料•法•环•安”等施工要素信息化管理水平&#xff0c;实现工程施工可视化智能管理&#xff0c;并逐步实现绿色生态建造。 相关技术&#xff1a;微…

“百团大战”下,20年代的国产数据库如何乘风破浪?

引言 在数字化浪潮的推动下&#xff0c;数据库技术已成为支撑数字经济的坚实基石。腾讯云 TVP《技术指针》联合《明说三人行》特别策划的直播系列——【中国数据库前世今生】&#xff0c;我们将通过五期直播&#xff0c;带您穿越五个十年&#xff0c;深入探讨每个时代的数据库演…

vue3.0(四) ref全家桶以及响应的 源码分析

文章目录 1 ref1.1 ref() 是什么1.2 ref() 特点1.3 创建响应式数据1.4 引用DOM元素1.5 深层响应性1.6 DOM 更新时机1.7 ref源码 2 isRef2.1 isRef运用2.2 isRef源码 3 unref3.1 unref运用3.2 unref源码 4 shallowRef4.1 shallowRef运用4.2 shallowRef源码 5 triggerRef5.1 trig…

SpringCloud系列(10)--Eureka集群原理及搭建

前言&#xff1a;当注册中心只有一个&#xff0c;而且当这个注册中心宕机了&#xff0c;就会导致整个服务环境不可用&#xff0c;所以我们需要搭建Eureka注册中心集群来实现负载均衡故障容错 Eureka架构原理图 1、Eureka集群原理 2、创建Eureka Server端服务注册中心模块 (1)在…

ios微信小程序禁用下拉上拉

第一步&#xff1a; page.json配置页面的"navigationStyle":"custom"属性&#xff0c;禁止页面滑动 "navigationStyle":"custom" 第二步&#xff1a; 页面里面使用scroll-view包裹内容&#xff0c;内容可以内部滑动 <view class&…

LLaMA 3:大模型之战的新序幕

作者 | 符尧 OneFlow编译 翻译&#xff5c;杨婷、宛子琳、张雪聃 本文要点概览&#xff1a; 文本数据的扩展可能已经达到了极限&#xff0c;因为易于获取的网络文本资源&#xff08;如Common Crawl、GitHub、ArXiv等&#xff09;已基本被充分利用。 尽管如此&#xff0c;通过更…

Redis底层数据结构之ZSkipList

目录 一、概述二、ZSkipList结构三、和平衡树和哈希表的对比 redis底层数据结构已完结&#x1f44f;&#x1f44f;&#x1f44f;&#xff1a; ☑️redis底层数据结构之SDS☑️redis底层数据结构之ziplist☑️redis底层数据结构之quicklist☑️redis底层数据结构之Dict☑️redis…

[Diffusion Model 笔记]Score based

目录 概述方法怎么估计score&#xff08;估计噪声就是估计score&#xff09;怎么采样&#xff08;给原始数据加噪声&#xff0c;早期大后来变小&#xff09;inpainting &#xff08;来自补充材料&#xff09;还没有细究的地方&#xff1a; 概述 本文是观看以下视频的笔记&…