P1182 數列分段 Section II(二分)

2021-10-02 10:02:15 字數 821 閱讀 3194

題目:

對於給定的乙個長度為n的正整數數列 a1∼

na_

a1∼n

​ ,現要將其分成 m(m ≤ n)段,並要求每段連續,求每段和的最大值最小。

solve:顯然的最大值最小化問題,用二分

列舉答案,列舉的範圍:只要從陣列中最大的那個數列舉到所有數的和就行了。

#include

using

namespace std;

const

int inf =

0x3f3f3f3f

;const

int maxn =

1e5+7;

int n, m;

int a[maxn]

;bool

judge

(int mid)

//判斷當前列舉的答案mid是否符合要求}if

(cnt >= m)

return

true

;//如果劃分的區間數很多,超過了m個,說明mid小了

return

false;}

intmain()

while

(l <= r)

//二分

printf

("%d\n"

, l)

;return0;

}

P1182 數列分段Section II

二分答案 確定左邊界和右邊界後找中間值,驗證該值是不是不滿足 要找到滿足中最小的那個 不如說是找到不能滿足的最大的那個 1 主要是怎麼寫好judge函式。將數列在保證分段和不超過mid的情況下 盡可能使得段數最少 如果最少段數超過了m,說明滿足最大值最小的 ans 一定比該二分答案大,也就是說mid...

P1182 數列分段 Section II

對於給定的乙個長度為n的正整數數列a ia i,現要將其分成m m n m m n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列4 2 4 5 142451要分成33段 將其如下分段 4 2 4 5 1 42 45 1 第一段和為66,第22段和為99,第33段和為11,和最...

P1182 數列分段 Section II

求最小值的最大,最大值的最小,考慮二分 對於給定的乙個長度為n的正整數數列a i,現要將其分成m m n 段,並要求每段連續,且每段和的最大值最小。輸入格式 第1行包含兩個正整數n,m。第2行包含nn個空格隔開的非負整數a,含義如題目所述。輸出格式 乙個正整數,即每段和最大值最小為多少。輸入樣例 1...