请教高手用蛮力法解决01背包问题的c++代码能不能给写一下用最容易理解的方法??感激 不尽!!!!!

请教高手用蛮力法解决01背包问题的c++代码能不能给写一下用最容易理解的方法我的水平不高??感激不尽!!!!!... 请教高手用蛮力法解决01背包问题的c++代码能不能给写一下用最容易理解的方法我的水平不高??感激 不尽!!!!! 展开
 我来答
Irreappearable
2012-04-22 · TA获得超过4956个赞
知道大有可为答主
回答量:1423
采纳率:25%
帮助的人:3096万
展开全部
纯蛮力,毫无优化...

#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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式