编辑代码

#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;
    }