洛谷P1182 數列分段 Section II

2021-08-22 19:37:18 字數 692 閱讀 6357

. . .分析

首先,分析題目,求最大值的最小化,直接聯想到二分

然而關鍵是要怎麼去高效的check

我們考慮乙個貪心的思路,能加的就加上,不能則新開一段,所以對於二分的值x,我們從數列a從前往後掃

如果t大於了w,我們不加而是t重新賦值並且tj++,最後只需判斷tj是否不小於m就行了。

注意:二分時的區間取值問題,很明顯,對於l的賦值應該取數列中的最大值,而r應該取數列的總和。

. .

. .

.程式:

#include

using

namespace

std;

int n,m,a[100001];

bool check(int w)

if (tj>=m) return

true;else

return

false;

}int main()

while (l<=r)

cout

0;}

洛谷 P1182 數列分段

這是一道典型的二分答案問題 最大值最小,最小值最大 關鍵是對於細節的處理。二分的框架 l max,r sum while l r else l m 1 cout 二分的框架是普遍使用的,關鍵是檢驗函式的設計,此處的檢驗函式的含義為 是否存在一種合法的劃分,使得每段的最大值都不大於m。設計好了檢驗函式...

洛谷P1182數列分段

對於給定的乙個長度為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...

洛谷 P1182數列分段Section 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...