keda.#P1095. 数列分段 Section II

该文是一个关于算法的问题,描述了如何将一个正整数数列分成指定段数,使得每段连续且每段和的最大值最小。给定数列长度N、段数M及数列元素,目标是找到这个最小的最大和。提供的C++代码实现了一个二分查找的方法来解决这个问题。
摘要由CSDN通过智能技术生成

题目描述

对于给定的一个长度为 NN 的正整数数列 AA ,现要将其分成 MM 段,并要求每段连续,且每段和的最大值最小。

例如,将数列 4 \ \ 2 \ \ 4 \ \ 5 \ \ 14 2 4 5 1 要分成 33 段:

若分为 [4[4 2][42][4 5][1]5][1],各段的和分别为 6, 9, 16,9,1 ,和的最大值为 99;

若分为 [4][2[4][2 4][54][5 1]1],各段的和分别为 4, 6, 64,6,6 ,和的最大值为 66;

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

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

输入格式

第 11 行包含两个正整数 N,MN,M

第 22 行包含 NN 个空格隔开的非负整数 A_iAi,含义如题目所述。

输出格式

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

输入数据 1

Copy

输出数据 1

Copy

数据范围与约定

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

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

对于 100\%100% 的数据,1\leq N\leq 10^51≤N≤105,M\leq NMN,A_i < 10^8Ai<108, 答案不超过 10^9109。

废话不多说,直接上代码!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值