Contents
Problem
貌似又叫做烏龜塔。
Solution
作法可參考: LIS。
先將烏龜依可負荷重量(已排除自身)做排序。每次先選可負荷較少的,如果一樣則是看誰較輕,從上往下開始建烏龜塔。
利用 dp[]
來記錄到每層所需要負荷的重量。只要此烏龜可負荷其上面的重量,就可判斷是否較有潛力成為這層的烏龜(也就是比較輕的)。有點像 LIS 的作法,去更新每隻烏龜下面可接的烏龜。
最後只要從尾巴開始掃,看長度多少即可。
用單純數字來舉例的話(由小到大): dp[0] = 0
step 1 5 3 7 4 5
0 x x x x x x init
1 1 x x x x x 可接 1。
2 1 5 x x x x 5 可接在 1 後面。
3 1 3 x x x x 3 可接在 1 後面,且比 5 更有潛力
4 1 3 7 x x x 7 可接在 1 後面,但不會比 3 更有潛力。7 還可接在 3 後面。
5 1 3 4 x x x 4 可接在 3 後面,且比 7 更有潛力。(省略其他檢查)
6 1 3 4 5 x x 5 可接在 4 後面。
長度為 4: 1 3 4 5
step 表 看第幾個數字。
Code
1 |
|