给定背包容量W=20,以及6个物品。重量分别为(5,3,2,10,4,2),价值分别为(11,5,15,18,12,6),求解此背包问题。
//Ex8_2 #include<iostream> #include<vector> using namespace std; int W = 20; vector<pair<int, int>> bags = { {5,11},{3,8},{2,15},{10,18},{4,12},{2,6} }; int visited[100]; struct Result{ vector<int> bags; int cost; }tmp,max; void print(Result &re) { for (int& i : re.bags) cout << bags[i].first<<"("<<bags[i].second<<")" << " "; cout << "价值:" << re.cost << endl; } void dfs(int w) { if (w >= 0) { cout << "可选方案:"; print(tmp); if (max.bags.empty() || tmp.cost > max.cost) max = tmp; } for (int i = 0; i < bags.size(); i++) { if (!visited[i] && bags[i].first <= w) { visited[i] = 1; tmp.bags.push_back(i); tmp.cost += bags[i].second; dfs(w - bags[i].first); tmp.cost -= bags[i].second; tmp.bags.pop_back(); visited[i] = 0; } } } int main() { dfs(W); cout << "最优方案:"; print(max); return 0; }