Leetcode 2212 - Maximum Points in an Archery Competition

題目

Problem#

有 Alice 和 Bob 比賽射箭,每個人有 numArrows 支箭 ,一人各射 12 局,規則是: 如果第 $i$ 局的分數比另一個人大,$A_i \ge B_i$ 則 A 得到 $i$ 分。
今天 Alice 先射完了,他的結果是 [aliceArrows_0, aliceArrows_11] ,問你 Bob 的結果長怎樣,他的得分才會是最大的

想法#

這題有兩種做法: 爆搜和 DP。
之所以可以爆搜是因為局數 只有 12 局,所以能在 $\mathcal{O}(2^12)$ 內做完,bitwise 枚舉也是一樣。DP 則是把箭數當重量、得分當價值的話,問題就變成了 0/1 背包 $\mathcal{O}(nm), n=\text{12}, m=10^5$

AC Code#

backtracking#

bitwise 枚舉#

0/1 背包#

賞析#

  • top-down DP作法,跟 bottom-up 邏輯差不多,差在 access 要用 function ,dp 表格不是先建好,而是在 recursive 中建立

https://leetcode-cn.com/problems/maximum-points-in-an-archery-competition/solution/cer-jin-zhi-mei-ju-by-liu-xiang-3-8q3b/
https://leetcode.com/problems/maximum-points-in-an-archery-competition/discuss/1865563/C%2B%2B-or-Backtracking-or-List-of-problems