1
這是一個算法問題,我認爲這是一個算法問題,但我自己想不到一個簡單的解決方案。最大加權片段覆蓋算法
問題是由合併兩個著名問題的啓發:最小段覆蓋&揹包問題,並作爲中的描述:
鑑於n
段[l_i, r_i]
,所有l_i, r_i in [1,M]
。 n, M
是已知的。
每個區段的值爲v_i
,如果您可以選擇任意數量的非重疊區段,您可以獲得的最大總值是多少? (接觸是確定)
我有一個強烈的感覺,我的想法是 過於複雜,但現在在我的腦海中的解決方案是使用動態編程就像我們解決揹包。
- 升序排序
- 段由
r_i
定義DP(i) := maximum value we can get using segment [0,i]
,這裏的索引是步驟1 DP(i) = max(DP(j) + v[i], DP(i-1))
其中j is the largest index where r_j <= l_i, which can be found using binary search
我認爲該解決方案是O(N lg N)
後的排序索引。現在我的問題是:
- 此解決方案是否正確?
- 有沒有更簡單,更好的性能解決方案?
這就是所謂的「加權區間調度」,谷歌它。 –
哇感謝的伴侶,正是我所尋找的...而且的確很經典。總之,看起來O(N lg N)是我能達到的最好的... – shole