#31630: 解題報告


dfd8282@gmail.com (fishhh)

學校 : 嘉義市私立嘉華高級中學
編號 : 99760
來源 : [114.40.219.99]
最後登入時間 :
2024-05-14 23:40:30
f314. 3. 勇者修煉 -- 2020年10月APCS | From: [36.236.9.235] | 發表日期 : 2022-08-11 19:12

這是我自己的想法啦 可以參考看看

只有一排的話,那每個位置當終點的最佳答案 就是到這個點的最大連續和

因為可以從左、右走過來 所以要做兩次最大連續和

我是開 dp[10000][3]

dp[i][1]用來記錄從左邊走過來,i為終點 的最大連續和

dp[i][2]用來記錄從右邊走過來,i為終點 的最大連續和

然後 dp[i][0]=max(dp[i][1],dp[i][2]) 用來記錄這個點當終點的最大連續和

 

接下來進入到 1~m-1 層

我將每一層輸入的數字存在 ary[10000] 裡面

可以知道 以某一點當作起點的話,那他的權重就直接等於 dp[i][0]+ary[i]

一樣左右都要做一次 

dp[i][1]=max(dp[i-1][1]+ary[i],dp[i][0]+ary[i])  前面的部分是指從左邊走過來的最大值 後面是指從上面直接走下來的值

同理右邊也是一樣 dp[i][2]=max(dp[i+1][2]+ary[i],dp[i+1][0]+ary[i]) 

然後再取max

 

//其實第一層不用特別處理~ 只是我分開來講 或許會比較好理解?

 
ZeroJudge Forum