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