fzyzoj1578 數列分段

2021-07-24 01:27:58 字數 1121 閱讀 7404

【fzyzoj1578】數列分段

註明

這道題是別人學校**的題,進不了,交不了我也很傷心,,,所以,所以,,借鑑思路就好了。。

【二分】

description

對於給定的乙個長度為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。

input format

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

output format

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

【解題思路】和noip2015跳石頭那道題很像,不過這個可以把他模擬成加石頭。。。主要是二分套路,最大值最小。。

#include

#include

#include

#include

using

namespace

std;

#define ll long long

const

int n=100010;

int sum[n],n,m;

bool check(ll x)

if(ans<=m)return

true;//左邊查詢

}int main()

int l=1,r=sum[n];

ll ans;

while(lint mid=(l+r)>>1;

if(check(mid))ans=mid,r=mid-1;

else l=mid+1;

}cout

0;}

數列分段2

目描述 對於給定的乙個長度為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 第一...

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

點我點我點我點我點我點我點我點我點我點我點我點我點我點我點我點我 二分答案 貪心 首先,分析題目,求最大值的最小化,直接聯想到二分,so我們直接二分答案,關鍵是要怎麼去高效的check,因為大家很容想到字首和,但實際上這個空間是可以省略的,為什麼呢?我們考慮乙個貪心的思路,能加的就加上,不能則新開一...