请教高手用蛮力法解决01背包问题的c++代码能不能给写一下用最容易理解的方法??感激 不尽!!!!!
请教高手用蛮力法解决01背包问题的c++代码能不能给写一下用最容易理解的方法我的水平不高??感激不尽!!!!!...
请教高手用蛮力法解决01背包问题的c++代码能不能给写一下用最容易理解的方法我的水平不高??感激 不尽!!!!!
展开
展开全部
纯蛮力,毫无优化...
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
void solve(int capacity, int *values, int *weights,
vector<int> &choice, int depth, int &max_value)
{
if (depth == choice.size()) {
int cur_weight = 0, cur_value = 0;
for (int i = 0; i != depth; ++i) {
if (choice[i] == 1) {
cur_weight += weights[i];
cur_value += values[i];
}
}
if (cur_weight <= capacity && cur_value > max_value) {
max_value = cur_value;
}
return;
}
choice[depth] = 0;
solve(capacity, values, weights, choice,
depth + 1, max_value);
choice[depth] = 1;
solve(capacity, values, weights, choice,
depth + 1, max_value);
}
int solve(int capacity, int *values, int *weights, int n) {
int max_value = 0;
vector<int> choice(n, 0);
solve(capacity, values, weights, choice, 0, max_value);
return max_value;
}
int main() {
int capacity = 10, n = 5;
int values[] = { 6, 3, 5, 4, 6, };
int weights[] = { 2, 2, 6, 5, 4, };
cout << solve(capacity, values, weights, n) << endl;
return 0;
}
#include <iostream>
using std::cout;
using std::endl;
#include <vector>
using std::vector;
void solve(int capacity, int *values, int *weights,
vector<int> &choice, int depth, int &max_value)
{
if (depth == choice.size()) {
int cur_weight = 0, cur_value = 0;
for (int i = 0; i != depth; ++i) {
if (choice[i] == 1) {
cur_weight += weights[i];
cur_value += values[i];
}
}
if (cur_weight <= capacity && cur_value > max_value) {
max_value = cur_value;
}
return;
}
choice[depth] = 0;
solve(capacity, values, weights, choice,
depth + 1, max_value);
choice[depth] = 1;
solve(capacity, values, weights, choice,
depth + 1, max_value);
}
int solve(int capacity, int *values, int *weights, int n) {
int max_value = 0;
vector<int> choice(n, 0);
solve(capacity, values, weights, choice, 0, max_value);
return max_value;
}
int main() {
int capacity = 10, n = 5;
int values[] = { 6, 3, 5, 4, 6, };
int weights[] = { 2, 2, 6, 5, 4, };
cout << solve(capacity, values, weights, n) << endl;
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询