推 alan23273850: 不知道可不可以用dp 05/20 01:03
推 alan23273850: S(i) = max { a(i) + S(i+2), S(i+1) } 05/20 01:08
→ alan23273850: 而且這題更有趣的是,整個DP表格可以從尾巴算回來, 05/20 03:40
→ alan23273850: 換言之,你隨時只要記錄 S(i+1) 跟 S(i+2) 兩個格子 05/20 03:41
→ alan23273850: 所以既省時 O(n) 又省空間 O(1) 05/20 03:41
→ alan23273850: 然後如果表格是從頭開始算的話,就可以邊輸入數字邊 05/20 03:42
→ alan23273850: 計算,這樣整個 a[n] 陣列很大的時候就不怕沒空間存 05/20 03:43
→ alan23273850: 這題是很好的 leetcode-like 考題喔 05/20 03:44
推 plsmaop: 感覺是maximum subarray的變形 05/20 06:20
推 plsmaop: 阿我搞錯了,不太像 05/20 06:25
→ alan23273850: 這題真好玩,不懂可以再問我 05/20 12:30
→ alan23273850: 你的演算法之所以不是optimal,是因為很多subtree還 05/20 14:43
→ alan23273850: 是會重複計算,考慮a1+S4與a2+S4,用你原本的tree法 05/20 14:44
→ alan23273850: 會發現兩個S4分屬不同子樹,要算兩次,但是只要運用 05/20 14:44
→ alan23273850: DP技巧的話所有S4只會算過一遍。That's all. 05/20 14:44
→ wang19980531: 懂了 05/20 16:41
→ wang19980531: 我試著用DP做看看 05/20 16:42
→ wang19980531: 謝謝 alin 大大 你的分析好詳細 05/21 09:03