考慮到每個主件最多只有兩個附件,因此我們可以通過轉化,把原問題轉化為01揹包問題來解決,在用01揹包之前我們需要對輸入資料進行處理,把每一種物品歸類,即:把每乙個主件和它的附件看作一類物品。處理好之後,我們就可以使用01揹包演算法了。在取某件物品時,我們只需要從以下四種方案中取最大的那種方案:只取主件、取主件+附件1、取主件+附件2、既主件+附件1+附件2。很容易得到如下狀態轉移方程:
f[i,j]=max
其中,f[i,j]表示用j元錢,買前i類物品,所得的最大值,a[i,0]表示第i類物品主件的**,a[i,1]表示第i類物品第1個附件的**,a[i,2]表示第i類物品第2個附件的**,b[i,0],b[i,1],b[i,2]分別表示主件、第1個附件和第2個附件的重要度。
#include using namespace std;
int zf[65][3],w[65][3],v[65][3],d[65][3205];
int main()
else if(w[q][1]==0)
else
} for(i=1;i<=m;i++)
for(j=0;j<=n;j++)
if(j>=w[i][0]+w[i][1])
if(j>=w[i][0]+w[i][2])
if(j>=w[i][0]+w[i][1]+w[i][2])
} cout<
有依賴的01揹包問題( 金明的預算方案)
考慮到每個主件最多只有兩個附件,因此我們可以通過轉化,把原問題轉化為01揹包問題來解決,在用01揹包之前我們需要對輸入資料進行處理,把每一種物品歸類,即 把每乙個主件和它的附件看作一類物品。處理好之後,我們就可以使用01揹包演算法了。在取某件物品時,我們只需要從以下四種方案中取最大的那種方案 只取主...
金明的預算方案(有依賴的揹包問題)
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過 n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的...
金明的預算方案(有依賴的揹包問題)
金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間金明自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n元錢就行 今天一早,金明就開始做預算了,他把想買的物品分為兩類 主件與附件,附件是從屬於某個主件的,下表就是一些主件與附件的例...