#41117: C++詳解-左右前綴和


toseanlin@gmail.com (Dr. SeanXD)

學校 : 康橋雙語學校
編號 : 158065
來源 : [24.147.249.5]
最後登入時間 :
2024-10-08 11:06:51
f314. 3. 勇者修煉 -- 2020年10月APCS | From: [220.136.105.176] | 發表日期 : 2024-07-05 11:13

將資料收到一個二維陣列「v」中,並且再宣告三個二維陣列,分別為「答案、左前綴合、右前綴合」。收完資料之後特別判斷第一行的左右前綴合,需要注意的是進行前綴合運算時,如果有發生前面都是負數的情況,這樣就對造成數值不正確,所以相加前綴和時需要宣告一個 sum 變數並且預設為 v[0][0],將 sum = max(0, sum) + v[0][i]。這樣子的話就是判斷前面的前綴合是否是負數,並且將較大值加到前綴合中。將第一行的「答案」設定為該位置的左右前綴合較大者。

跑一個 For迴圈 從 1 到 N-1 (不包含第 0 行,剛剛有進行判斷了),並且判斷其左右前綴合。這次比較不一樣的是還需要考慮從上一行往下走到目前這一行的情況。如果進行判斷時跑到邊界 (即第一個或最後一個位置),則將這個位置的前綴合設定為「上一行該位置的答案」+「v[i][j]」,否則將這個位置的前綴合設定為 max(前一個位置的前綴合, 上一行該位置的答案 + v[i][j]。

輸出時輸出「答案陣列」最後一行的「最大值」。

 

範例程式碼

 
ZeroJudge Forum