背包问题,毫无疑问是动态规划的东西,但是作为菜鸟,写一下菜鸟的东西也有点用处滴...
#include <iostream>
#include <vector>
using namespace std;
void MFKnapsack(int capacity, int *values, int *weights,
vector<int> &c, int d, int &max_value)
{
if (d== 0) {
int cur_weight = 0, cur_value = 0;
for (int i = 0; i != d; ++i) {
if (c[i] == 0) {
cur_weight += weights[i];
cur_value += values[i];
}
}
if (cur_weight <= capacity && cur_value > max_value) {
max_value = cur_value;
}
return;
}
c[d] = 0;
MFKnapsack(capacity, values, weights, c,
c.size()-2, max_value);
c[d] = 1;
MFKnapsack(capacity, values, weights, c,
c.size()-2, max_value);
}
int MFKnapsack(int capacity, int *values, int *weights, int n)
{
int max_value=0;
vector<int> c(n,0);
cout<<c.size()<<endl;
MFKnapsack(capacity,values,weights,c,1,max_value);
return max_value;
}
int main()
{
int capacity=10,n=7;
int values[]={6,3,5,4,6,3,10};
int weights[]={1,2,5,5,4,4,6};
cout << MFKnapsack(capacity, values, weights, n) << endl;
system("pause");
}