該算法即將訪問k個離開節點並以最小步數返回到根節點!如何確定訪問有根樹的k離開節點的最小步驟?
認爲這是作爲一個人站在2點,他/她想要訪問的最基本的步驟樹中的k樹葉和回點2
對於k = 3路徑可就像
2->「3」→2→1->「0」→1→「5」→1→2(這裏3,0,5是葉子) 所以我們訪問了3個leves ..
答案:8
該算法即將訪問k個離開節點並以最小步數返回到根節點!如何確定訪問有根樹的k離開節點的最小步驟?
認爲這是作爲一個人站在2點,他/她想要訪問的最基本的步驟樹中的k樹葉和回點2
對於k = 3路徑可就像
2->「3」→2→1->「0」→1→「5」→1→2(這裏3,0,5是葉子) 所以我們訪問了3個leves ..
答案:8
這是有根樹上的又一個自下而上的動態程序。
對於每個子樹,我們計算至少訪問j
樹葉的成本,作爲列表。如果子樹是單葉,則此列表是[0, 0, ∞, ∞, …, ∞]
,其中∞
表示無窮大,表示不可行的葉子數量。否則,我們計算每個孩子的列表,除2
之外的每個列表中的第一個以外的所有條目增加,然後通過卷積減少。要卷積兩個列表A
和B
將計算[min {A[i] + B[j-i]: i in 0…j}: j in 0…k]
。返回根的k
條目。
這是O(n k^2)
時間。
這個問題可能來自正在進行的[比賽](https://www.facebook.com/hackercup/problem/1525154397757404/) –
@PhamTrung嘆息。根據個人的政策,我會拒絕刪除,因爲10k用戶會有不公平的訪問。 –
沒關係,實際上沒有迴應這種問題的規則:)。恕我直言,對於10K用戶,他們不知道如何解決這個問題的機會非常罕見。 –
https://en.wikipedia.org/wiki/Dynamic_programming –
你能形容更多嗎? –
最後一個問題Facebook黑客杯2016? –