01背包问题是个经典的动态规划问题,但是也可以用回溯法来解决。只是这是找一个子树而不是一个全部树元素的排列。
#include
using namespace std;
#define MAX 1024
int C=7;//最大重量
int N=4;//包个数
int value[MAX];//记录每个包的价值
int weight[MAX];//记录每个包的重量
int currentValue=0;//当前的价值
int currentWeight=0;//当前的重量
int maxValue=0;//记录最大价值
int tempRecord[MAX];//记录选中的包编号
int maxRecord[MAX];//记录当取最大价值时的选中的包编号
/*
*设置tempcount和maxcount是我们只是找一棵子树。每次找的个数也许都不一样,这就是tempcount的原因。
* 为了正确的记录当取到最大价值时的节点编号,我们用了maxcount这个记录变量。
*/
int tempcount;//记录每次选中包的个数
int maxcount;//记录最大价值时选中的包个数
void swap(int& a,int& b)
{
int temp=a;
a=b;
b=temp;
}
void init()
{
/* 测试数据一*/
value[1]=9;
value[2]=10;
value[3