天天看點

物件捆綁 背包問題 動态規劃 求解

  物件捆綁背包問題:給定N元錢,要購買一些器件。器件有主件和附件之分,也即主件可以單獨購買,然而購買附件必須購買對應的主件。下表就是一些主件與附件的例子:

主件

附件

電腦     

列印機、掃描器

書櫃

圖書

書桌        

 台燈

工作椅

     把每件物品規定一個重要度,分為5等:用整數1~5表示,第5等最重要。在花費不超過N元(可以等于N元)的前提下,使每件物品的價格與重要度的乘積的總和最大。設第j件物品的價格為v[j],重要度為p[j],共選中了k件物品,編号依次為j1,j2,……,jk,則所求的總和為:v[j1]*p[j1]+v[j2]*p[j2]+ …+v[jk]*p[jk]。

  輸入

  第1行,為兩個正整數,用一個空格隔開:N  m

  從第2行到第m+1行中,第j行給出了編号為j-1的物品基本資料,每行有3個非負整數: v  p  q(v:物品價格,p:物品重要度,q:主件還是附件。q=0為主件;q>0為附件,q是所屬主件的編号)

  輸出

    輸出為不超過總錢數的物品的價格與其重要度乘積的總和的最大值。

  動态規劃求解:

  1)思路:同一般的背包問題不同的是,在購買附件的同時必須要購買相應的主件。我們需要對主,附件做捆綁。每一種捆綁結果作為一種購買方式,之後同一般的背包問題

  例如:主件A,有附件B、附件C,則由數理統計的知識可知有4中購買方式,即(A,A+B,A+C,A+B+C)。

    附件個數為n-1時的購買方式個數為:

物件捆綁 背包問題 動态規劃 求解

  2)主附件捆綁的資料結構選擇:

  因為一件附件隻有一個主件,為了捆綁的友善性,可以采用連結清單的形式。主件為頭結點,拉鍊為附件節點。如下所示:

物件捆綁 背包問題 動态規劃 求解

  3)問題求解