二分答案 洛谷P1182 數列分段

2021-08-22 19:22:40 字數 434 閱讀 4234

將一段數列分成不超過

m m

的段,使得每段的最小的最大值

一般看到最小……最大……什麼的基本都用二分

因為最大值要盡量小,所以資料必然具有單調性,所以我們可以通過二分最大值(即最終答案)來求解。中間加上判斷即可

#include

using

namespace

std;int l,r,mid,a[100001],s,n,m;

inline

bool check(register

int sum)//判斷

return j>n;//看到最後能否滿足條件

}signed main()

printf("%d",r+1);//因為r每次都為mid-1,且本題一定有解,故輸出mid,即r+1

}

洛谷P1182 數列分段(二分 貪心)

題目描述 對於給定的乙個長度為n的正整數數列 a a 1 n 現要將其分成 mm m leq nm n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列 4 2 4 5 14 2 4 5 1 要分成 33 段。將其如下分段 4 2 4 5 1 4 2 4 5 1 第一段和為 66...

洛谷 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...