洛谷 1182 二分 最小化最大值

2021-09-11 01:34:23 字數 1101 閱讀 3693

對於給定的乙個長度為n的正整數數列a−i,現要將其分成m(m≤n)段,並要求每段連續,且每段和的最大值最小。

關於最大值最小:

例如一數列42451要分成3段

將其如下分段:

[42][45][1]

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

將其如下分段:

[4][24][51]

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

並且無論如何分段,最大值不會小於6。

所以可以得到要將數列42451要分成3段,每段和的最大值最小為6。

輸入格式:

第1行包含兩個正整數n,m。

第2行包含n個空格隔開的非負整數ai​,含義如題目所述。

輸出格式:

乙個正整數,即每段和最大值最小為多少。

輸入樣例#1:複製

5 3

4 2 4 5 1

輸出樣例#1:複製

6
對於20%的資料,有n≤10;

對於40%的資料,有n≤1000;

對於100%的資料,有n≤100000,m≤n,ai​之和不超過10^9。

以及這道題讓我知道,隨便取下限值是會wa的,比如你令l直接取0就會wa掉,雖然我也不知道為什麼。

#include#include#include#define inf 0x3f3f3f3f

typedef long long ll;

using namespace std;

//最小化最大值問題

int a[100005];

int n,m;

int main()

if(cnt>m)

break;

}if(cnt<=m) //每段和太大了

r=mid-1;

else //不符合題意 修改下限(最小化問題)

l=mid+1;

}printf("%d\n",l);

return 0;

}

二分 最小化最大值

注意答案的二分性質,必須要滿足在滿足給定條件的所有情況的時候都滿足要求才能更新ans。include using namespace std typedef long long ll inline ll in while c 0 c 9 res res 10 c 48,c getchar retur...

zzuli 1919 二分 最大值最小化

description 晴天想把乙個包含n個整數的序列a分成連續的若干段,且和最大的一段的值最小,但他有強迫症,分的段數不能超過m段,然後他就不會分了。他想問你這個分出來的和最大的一段的和最小值是多少?input 第一行輸入乙個整數t,代表有t組測試資料。每組資料第一行為兩個整數n,m分別代表序列的...

POJ 3273(二分,最小化最大值)

和這道題一樣了 description 聰哥在暑假參加了打零工的活動,這個活動分為n個工作日,每個工作日的工資為vi。有m個結算工錢的時間,聰哥可以自由安排這些時間,也就是說什麼時候拿錢,老闆說的不算,聰哥才有發言權!因為聰哥是土豪,他是老闆的老闆 聰哥不喜歡身上一次性有太多的錢,於是他想安排一下拿...