1436:數列分段ii
時間限制: 1000 ms 記憶體限制: 65536 kb
提交數: 1519 通過數: 693
【題目描述】
對於給定的乙個長度為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,第2段和為6,第3段和為6,和最大值為6。
並且無論如何分段,最大值不會小於6。
所以可以得到要將數列4 2 4 5 1要分成3段,每段和的最大值最小為6。
【輸入】
第1行包含兩個正整數n,m,第2行包含n個空格隔開的非負整數a[i],含義如題目所述。
【輸出】
僅包含乙個正整數,即每段和最大值最小為多少。
【輸入樣例】
5 34 2 4 5 1
【輸出樣例】
6
#include
#define ll long long
#define pii pair
#define inf 1<<30
using
namespace std;
const
int n=
1e6+5;
int n,m,a[n]
;intf(
int x)
} num++
;return num<=m;
//夠用
}int
main()
cout << res << endl;
return0;
}
1436 數列分段II
題解 二分答案 我們最終答案的取值區間是 max a i a i 設定 l max a i r a i mid不斷二分 mid表示每段和的最大值,也就是每段和都不超過mid 放到check函式裡,計算一下在mid為最大值的情況下可以分成多少段 如果段數 cnt m 說明這個mid小了,它還可以再大一...
貪心 數列分段II
時間限制 1 sec 記憶體限制 128 mb 題目描述 對於給定的乙個長度為n的正整數數列ai,現要將其分成連續的若干段,並且每段和不超過m 可以等於m 問最少能將其分成多少段使得滿足要求。輸入第一行包含兩個正整數n,m,表示了數列ai的長度與每段和的最大值 第二行包含n個空格隔開的非負整數ai。...
題解 數列分段II
對於給定的乙個長度為n的正整數數列a i,現要將其分成m m n m m n m m n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列42451要分成333段 將其如下分段 42 45 1 第一段和為6,第2段和為9,第3段和為1,和最大值為9。將其如下分段 4 24 51 ...