编辑代码

#include<stdio.h>
#define MAXN 20  

int  n=4;  
int W=6;  
int w[]={0,5,3,2,1};  
int v[]={0,4,4,3,1};  

int x[MAXN]; 
int maxv; 
void dfs(int i,int tw,int tv,int op[])
{
	if(i>n) 
	{
		if(tw==W&&tv>maxv)  
		{
			maxv=tv;
			for(int j=1;j<=n;j++)
			x[j]=op[j];
		 } 
	 } 
	 else   
	 {
	 	op[i]=1;  
		 dfs(i+1,tw+w[i],tv+v[i],op);
		 op[i]=0;
		 dfs(i+1,tw,tv,op); 
	 }	 
}
void dispsolution() 
{
	int i;
	printf("最优解:\n");
	for(i=1;i<=n;i++)
	if(x[i]==1)
	printf(" 选取第%d个物品\n",i);
	printf("总重量=%d,总价值=%d\n",W,maxv);
 } 
 int main(){
 	int op[MAXN];  
 	dfs(1,0,0,op);  
 	dispsolution();
 	return 0;
 }