揹包所有可能放置方法(C )

2021-08-17 18:24:22 字數 1090 閱讀 7924

回溯法求解,每次每個物品都有放與不放兩種情況,每次放時要判斷是否能放。

#include

using namespace std;

//回溯函式定義,rw 剩餘容量,i第i個物品,v體積陣列,number到第i個物品處有幾種裝法,n物品總數

int backtrack(int rw, int i, int *v, int number, int n);

//回溯法揹包問題

//揹包容量w

//n個零食,每個零食體積為v[i]

//輸入:

//n w

//v[0]...v[n-1]

//輸出

//最多幾種裝法,什麼也不裝也算一種

//例如,輸入為

//3 10

//1 2 4

//輸出為

//8//

//例如,輸入為

//3 10

//1 9 4

//輸出為

//6//

//例如,輸入為

//3 10

//5 5 3

//輸出為

//7int main()

//排序,從小到大

for (int i = 0; i < n;i++) }}

int result = 1;

result=backtrack(w,0,v,result,n);

cout << result;

system("pause");

return 0;

}//rw 剩餘容量,i第i個物品,v體積陣列,number到第i個物品處有幾種裝法,n物品總數

int backtrack(int rw,int i,int *v,int number,int n)

number++;

if (rw >= v[i]) tmp1=backtrack(rw-v[i],i+1,v,number,n);

number--;

tmp2=backtrack(rw , i + 1, v, number, n);

return tmp1 + tmp2;//返回放與不放兩種方法的總和

}

C語言 列舉所有可能

題目 a,b,c,d,e,f,g,h,i,j,共10名學生有可能參加計算機競賽,也可能不參加,因為某種原因他們受到下列條件的約束 1.如果a參加,b也參加 2.如果c不參加,d也不參加 3.a和c中只能有乙個人參加 4.b和d中有且僅有乙個人參加 5.d e f g h 中至少有2人參加 6.c和g...

01揹包,完全揹包C 實現

首先,上自己的 由於 注釋詳細,我就不解釋啦。看 就好o o。轉換為了01揹包問題求解。部分演算法與測驗資料資料參照了 不了解01揹包演算法的同學也可以到上述 先學習。本 可以輸出價值與揹包中的物品。先為大家雙手奉上執行結果。define volumn 14 揹包總容量為volumn 1 defin...

C 揹包問題

在0 1揹包中,物體或者被裝入揹包,或者不被裝入揹包,只有兩種選擇 迴圈變數i,j的意義 前i個物品能夠裝入載重量為j的揹包中 陣列value的意義 value i j 表示前i個物品能加載重量為j的揹包中的最大價值 若w i j,第i個物品不被裝入揹包,否則,第i個物品放入揹包後的最大價值 val...