給定n個整數(可正可負)a0,
a1,.
..an
−1
a_0, a_1, ... a_
a0,a1
,..
.an−
1,求它們的最大連續和。
s 0=
0,si
=∑j=
0i−1
aj(1
≤i≤n
)s_0 = 0, s_i = \sum_^ in)}
s0=0,
si=
j=0∑
i−1
aj(
1≤i≤
n) 可以得到原序列的累加量序列s0,
s1,.
..sn
s_0, s_1, ... s_n
s0,s1
,..
.sn
。這樣原序列的任意連續和都可以表示為sj−
si(0
≤i
n) s_j-s_i (0isj −si (0≤ in),找出最大的sj− si s_j-s_i sj−si 即可。 二重迴圈遍歷i ii 和 j jj,更新最大的sj− si s_j-s_i sj−si 。 對於確定的j jj,sj− si s_j-s_i sj−si 最小等價於si( 0≤ i s_i(0isi (0≤ i。因此,只需要一重迴圈,遍歷j jj的同時維護目前為止最小的s is_i si值,更新最大的sj− si s_j-s_i sj−si 。 題目maximum profit選自aizu-alds1_1_d,內容如下: tr_t rt at a certain time ttt( t=0, 1,2, ...n −1 )(t=0,1,2,...n−1) (t=0,1 ,2,. ..n− 1), and reports the maximum value of rj− ri r_j−r_i rj−ri where j > ij>i j>i . input the first line contains an integer n. in the following n lines, r tr_t rt (t= 0,1, 2,.. .n−1 )(t=0,1,2,...n−1) (t=0,1 ,2,. ..n− 1)are given in order. output print the maximum value in a line. constraints sample input 1write a program which reads values of a currency r
653
1343sample output 1
3
**如下:
//
#include
#include
using
namespace std;
const
int min_num =
-2000000000
;//定義足夠小的常數,用於取max
int n, ans;
intmain()
cur_min =
min(cur_min, rt)
;//維護當前量之前的最小值
} cout << ans << endl;
return0;
}
最大連續和
這個問題對我來說還挺難的,當初做dp時水過去了,但沒徹底理解,這次打算好好分析一下,爭取徹底搞懂。首先,像 1 1 2 2 3 3 4 4 5 5這樣的數列,想要找連續最大和,可以有很多種方法,從最慢的列舉o n 3 到最快的動態規劃o n 毫無疑問,我們要選擇複雜度低的演算法。所以我這裡就只分析兩...
最大連續和
求陣列中數的最大連續和,如 1,1,1,1,1 最大連續和為3 一 動態規劃 當我們從頭到尾遍歷這個陣列的時候,對於陣列裡的乙個整數,它有幾種選擇呢?它只有兩種選擇 1 加入之前的subarray 2.自己另起乙個subarray。那什麼時候會出現這兩種情況呢?設狀態為f j 表示以s j 結尾的最...
最大連續和
給出乙個長度為n的序列a1,a2,an,求最大連續和 使用列舉 時間複雜度o n 3 best a 1 初始最大值 for int i 1 i n i 設si a1 a2 ai,則ai ai 1 aj sj si 1 連續子串行的和等於兩個字首之差 時間複雜度o n 2 s 0 0 for int ...