數列分段 Section II

2021-09-08 02:27:22 字數 716 閱讀 6818

點我點我點我點我點我點我點我點我點我點我點我點我點我點我點我點我

二分答案+貪心

首先,分析題目,求最大值的最小化,直接聯想到二分,so我們直接二分答案,關鍵是要怎麼去高效的check,因為大家很容想到字首和,但實際上這個空間是可以省略的,為什麼呢?我們考慮乙個貪心的思路,能加的就加上,不能則新開一段,so對於二分的值x,我們從數列a從前往後掃,如果tot大於了x,我們不加而是tot重新賦值並且num++,最後只需判斷num是否不小於m就行了。這樣判斷與字首和一樣是o(n)的複雜度,但是節省了空間。雖然實際上毫無卵用

#include #define maxx 101000

#define ll long long

using namespace std;

inline int read()

while(isdigit(ch))

return s * w;

}int n, m;

int righ, lef, mid, cnt = 0, tot = 0;

int a[maxx];

inline bool check(int x)

} return cnt >= m;

}int main()

while (lef <= righ)

printf("%d\n", lef);

return 0;

}

數列分段 Section II

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

數列分段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...

數列分段 Section II

對於給定的乙個長度為n的正整數數列 a a1 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,第 22 ...