FJUT 2485 數列分段II

2022-08-22 01:54:13 字數 1244 閱讀 6612

timelimit:1000ms  memorylimit:128mb

64-bit integer io format:%lld

problem description

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

關於最大值最小

例如一數列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。

input

輸入的第1行包含兩個正整數n,m,第2行包含n個空格隔開的非負整數a[i],含義如題目所述。

(n≤100000,m≤n, a[i]之和不超過109。)

output

輸出僅包含乙個正整數,即每段和最大值最小為多少。

sampleinput

5 3

4 2 4 5 1

sampleoutput

6

分析:由題 需要推出最小值可能在的範圍。

然後將這個範圍進行二分,看其中的值能不能實現。

對於每個值,我們需要推出實現當前的值最少需要的段數,

如果段數大於m則不成立。

**如下:

#include using

namespace

std;

typedef

long

long

ll;int c[100100

];int

n,m;

int check(int

mid)

//cout<<"num"m)return0;

else

return1;

}intmain()

cout

}return0;

}

1436 數列分段II

1436 數列分段ii 時間限制 1000 ms 記憶體限制 65536 kb 提交數 1519 通過數 693 題目描述 對於給定的乙個長度為n的正整數數列a i 現要將其分成m m n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列4 2 4 5 1要分成3段 將其如下分段...

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。...