交替加減的最大子段和問題

2021-10-07 19:19:22 字數 1053 閱讀 6363

description

我們已經學習過了最大子段和問題,今天你的任務也是類似的最大子段和問題,只不過今天不是連續的累加和,而是先減後加,再減再加,這裡的加減法是交替出現的,請你設計乙個程式求出這樣的最大結果值。如有四個數11、3、2、-2,那麼最大的值是11-3+2-(-2)=12。注意這裡的運算結果有可能是負數!

input

本問題有多組測試資料,對於每組測試資料,輸入有兩行,第一行為乙個正整數n(1<=n<=200000);第二行是用空格隔開的n個整數ai(-10000<=ai<=10000,1<=i<=n)。

output

對於每組測試資料,輸出只有一行,即最大的交替運算的結果值。

sample input

4113

2-2

sample output

12
#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

200010

;int f[2]

[maxn][20

];int a[maxn]

;int n;

void

st_prework()

}}intst_query

(int l,

int r,

int id)

intmain()

for(

int i=

1;i<=n;i++

)for

(int i=

1;i<=n;i++

)st_prework()

;int ans=int_min;

for(

int i=

1;i<=n;i++

)else

}printf

("%d\n"

,ans);}

return0;

}

最大子段和問題

給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0 分治法 分析 首先將陣列分為兩部分,最大子段和 可以在陣列的左半部分也可以在右半部分,也可以橫跨分割點,因此我們只需要用分治思想求出左邊最大...

最大子段和問題

給定n 個整數 有可能是負數 組成的序列,要求分別用蠻力法,減治法和動態規劃法,求最該序列的最大子段和,並對它們的效率進行比較分析。也稱窮舉法或列舉法,是一種簡單直接地解決問題的方法,常常基於問題的描述,所以,蠻力法也是最容易應用的方法。它依賴的基本技術是遍歷,採用一定的策略依次處理待求解問題的所有...

最大子段和問題

問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如 a i a i 1 a j 當所給的整數均為負數時定義子段和為0.如果序列中全部是負數則 最大子段和為0,依次所定義 所求的最優值max,1 i問題解析 動態規劃演算法 dp i 包含元素i的子段和 dp 0 ...