参考代码如下:
#include<stdio.h>
const int Value[8]={11,21,31,33,43,53,55,65};
const int Weight[8]={1,11,21,23,33,43,45,55};
const int Len=8;
int x[8]={0};
int cx[8]={0};
int bestP=0;
int totalV=0;
int totalW=0;
const int W=110;
void Track(int i)
{
if(i>=Len)
{
if(totalV>bestP) //不断更新最优解
{
int j;
bestP = totalV;
for(j=0;j<Len;j++)
{
x[j]=cx[j];
}
return;
}
}
else{
if(totalW+Weight[i]<=W) //搜索左子树
{
cx[i]=1;
totalW+=Weight[i];
totalV+=Value[i];
Track(i+1);
totalW -= Weight[i];
totalV -= Value[i];
}
cx[i]=0;
Track(i+1); //搜索右子树
}
}
int main()
{
int i;
Track(0);
printf("%d\n",bestP);
for(i=0;i<Len;i++)
{
if(x[i]==1)
{
printf("%d ",i+1);
}
}
return 0;
}