问题描述:
问题求解:
主要代码
#include <iostream>
#include<stdio.h>
using namespace std;
#define MAXN 20 //最大问题规模
//问题描述
int W = 6;
int n = 4;
int w[] = {0,5,3,2,1};
int v[] = {0,4,4,3,1};
int x[MAXN];//用于标记物品是否被选
int maxv = 0;//最大价值初始化为0、
void dfs(int i,int tw,int tv,int op[])
{
if(i > n)
{
if(tw == W && tv > maxv)
{
maxv = tv;//保存最优解
for(int i = 1;i <= n;i++)
x[i] = op[i];//保存它
}
}
else
{
op[i] = 1;//选择
dfs(i+1,tw+w[i],tv+v[i],op);
op[i] = 0;// 不选择
dfs(i+1,tw,tv,op);
}
}
int main() {
int op[MAXN];
dfs(1,0,0,op);
for(int i = 1; i <= n;i++)
{
if(x[i] == 1)
printf("%d ",i);
}
printf("\n");
printf("最大价值为:%d",maxv);
return 0;
}