How can I solve it? KnapSack - values all the same but each other object has three weights

后端 未结 1 971
难免孤独
难免孤独 2021-01-29 12:38

I have a problem with solve my exercise. I read about dynamic programming and algorithms and I think my exercise is \"specific knapsack problem\". I solved it with brute force m

1条回答
  •  被撕碎了的回忆
    2021-01-29 13:34

    There are a few good tutorials on the internet that explain the Knapsack problem thoroughly.

    More specifically, I would recommend this specific one, where the problem and the DP-approach is entirely explained, including the solution in three different languages (including Java).

    // A Dynamic Programming based solution for 0-1 Knapsack problem
    class Knapsack
    {
        // A utility function that returns maximum of two integers
        static int max(int a, int b) { return (a > b)? a : b; }
    
       // Returns the maximum value that can be put in a knapsack of capacity W
        static int knapSack(int W, int wt[], int val[], int n)
        {
             int i, w;
         int K[][] = new int[n+1][W+1];
    
         // Build table K[][] in bottom up manner
         for (i = 0; i <= n; i++)
         {
             for (w = 0; w <= W; w++)
             {
                 if (i==0 || w==0)
                      K[i][w] = 0;
                 else if (wt[i-1] <= w)
                       K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]],  K[i-1][w]);
                 else
                       K[i][w] = K[i-1][w];
             }
          }
    
          return K[n][W];
        }
    
        // Driver program to test above function
        public static void main(String args[])
        {
            int val[] = new int[]{60, 100, 120};
            int wt[] = new int[]{10, 20, 30};
            int  W = 50;
            int n = val.length;
            System.out.println(knapSack(W, wt, val, n));
        }
    }
    /*This code is contributed by Rajat Mishra */
    

    Source: GeeksForGeeks

    0 讨论(0)
提交回复
热议问题