解决方案 »

  1.   

    看到这代码就头大,csdn中有专门放代码的地方 都不知道吗?
    public class Knapsack {     public static int [] [] knapsack(int [] w,int [] v,int c){
          int n=w.length;
          int [] [] m=new int [n+1] [c+1];
          for (int i = 1; i < n+1; i++) {
    m [i] [0]=0;
    }
          for (int j = 1; j < c+1; j++) {
    m [0] [j]=0;
    }
          for (int i = 1; i < n; i++) 
           for (int j = 1; j < c; j++) {
    m[i][j]=m[i-1][j];
    if(w[i-1]<=j)
    if(v[i-1]+m[i-1] [j-w[i-1]]>m[i-1][j])
    m[i][j]=v[i-1]+m[i-1][j-w[i-1]];
    }
          return m;
         }
     for(i=1;i<n+1;i++)
        for(j=1;j<m+1;j++)
        {
            if(w[i]<=j){
                 if(p[i]+c[i-1][j-w[i]]>c[i-1][j])
                     c[i][j]=p[i]+c[i-1][j-w[i]]; 
                 else
                     c[i][j]=c[i-1][j];
            }else              c[i][j]=c[i-1][j];
         }
         return(c[n][m]);     public static int [] buildSolution(int [] [] m,int [] w,int c){
          int j=c,n=w.length;
          int [] x=new int[n];
          for (int i = n; i >1; i--) 
    if(m[i][j]==m[i-1][j])
    x[i-1]=0;
    else{
    x[i-1]=1;
    j-=w[i-1];
    }  
          return x;
         }
    }