最大連續和 Aizu ALDS1 1

2021-10-25 03:22:52 字數 2283 閱讀 3111

​ 給定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,內容如下:

write a program which reads values of a currency r

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 1

653

1343

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