動態規划算法-解決01背包問題__演算法

來源:互聯網
上載者:User

問題描述:

    現有N個物品,其每個物品對應的重量為Wi,對應的價值為Vi (0 =< i <= N)。則對於固定承重為K的背包來說,在這些物品中放入某些物品使得對應的總價值最大。用C[N][K]可以表示,在一個固定承重為K的背包中放入N個物品時的最大價值。

       C[N][K] = max{C[N-1][K],C[N-1][K-X] + Vx}

       上述公式是一個遞推的過程,即在承重為K的背包中放入N個物品中的某些,使得總價值C[N][K]最大。而C[N][K]的大小取決於兩種情況中的最大值。C[N-1][K]表示遍曆前N-1個物品時對應的最大價值,第N個物品不放入。C[N-1][K-X] + Vx表示第N個物品放入後對應的總價值。X為第N個物品的重量,Vx為第N個物品的價值。只要用表格從一開始就儲存下對應的各項資料,則在後續過程中只需要查表遞推就可以得到想要的最大值。這種方法的本質就是一個遞推和用空間來節省時間的過程。

       將這個問題具體化一點:對於一個固定承重為10的背包,現在需要在4個物品中去挑選放入的物品來使得總的價值最大。這個4個物品分別為 A、價值3 重量 3 B、價值4 重量 6 C、價值5 重量 5 D、價值 7 重量 8。分別從物品編號的維度0-4和背包容量的維度0-10去產生對應的二維表格。儲存格中對應的資料即為最大價值C[i][j]。其中編號1到4分別對應A到D的物品(與順序無關),動態規劃就是在不停地填寫這張表。

表格如下:


由上表可以得出,當在4個物品中挑選物品放入固定承重為10的背包中時,可獲得的最大價值為C[4][10] = 8。

於是利用動態規劃的方法便獲得了該情況下對應的最大價值。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.