我們有一系列項目1,...,n,每個項目都有一個分數(i)。如果我們選擇一個項目,那麼我們不能選擇i + 1,... i + rest(i)項。目標是最大化總分。以最大增益順序跳轉 - 動態編程
我們可以用動態規劃解決這個問題。
對於第一項我們有兩個選項。或選擇它並轉到其餘(1)+ 1項目或不選擇它並轉到第二項目。
的遞歸函數:
c[i] = max{ c[i - 1], c[i + rest(i) + 1] + score(i) }
與此遞歸函數的問題是,它的子問題意味着子問題之間創建週期不是獨立的。
我認爲這將是理想的有類似
c[i] = max{ c[i - 1], c[i - itemThatWentToItem(i)] + score(i) }
也許一個解決辦法是有一個功能,讓所有導致項目我,然後把它們之間的最大比分的項目。
另一個想法是將此問題轉換爲DAG中的最長路徑,並針對所有子圖執行此操作。
任何想法?
從端計算它:C [1] = MAX {C [1 + 1],C [1 +其餘(ⅰ)+ 1] +評分(i)} – Ante
愚蠢的問題,但我可以在遞歸函數中做到這一點?最後的解決方案是c [0]? – Laxmana