回溯法求解,每次每個物品都有放與不放兩種情況,每次放時要判斷是否能放。
#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...