-2

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 method but I can't solve it with dynamic programming.

I have a ship (knapsack) which has 300 tons of weight. There are crystals which have in themselves 3 substances (X, Y, Z) - each other substance has weight and all crystals have the same value. I need to pack to ship as many as possible crystals but the proportions of substances of all packed crystals must be 1:1:1. But for example if I have three crystals with proportions 1:1:1 which give the biggest number of tons and eight crystals which give the same number of tons (two other combinations of crystals give the biggest number of tons) I need to choose the combinations with the lowest number of crystals.

I solved it with brute force method - I created a list of arrays of all combinations. Next I found they combinations with 1:1:1 proportions. Next I found the combination which gives the biggest number of tons and has the lowest number of crystals (if there are two or more combinations with the same biggest number of tons). I checked tests and it returned good scores, I haven't any idea how can I solve it with dynamic programming ;/ Is there someone who help me?

For Example when I have 10 crystals:

 1) X =2 Y =3 Z =4
 2) X =5 Y=10 Z =2
 3) X =3 Y =3 Z =3
 4) X =1 Y =0 Z =6
 5) X =9 Y=12 Z =4
 6) X =1 Y =1 Z =1
 7) X =2 Y =1 Z=0
 8) X =1 Y =2 Z =3
 9) X =1 Y =1 Z =1
10) X =4 Y =3 Z =3

The solution is: max 27 tons with five crystals (numbers: 1, 3, 6, 7 and 9)

Zaroos77
  • 19
  • 3
  • Please, post your code, the errors you are facing and what exactly is the issue you are facing. For a more generic guideline, take a look at [my answer](http://stackoverflow.com/a/40387517/2679529). – marcelovca90 Nov 02 '16 at 18:46
  • Possible duplicate of [specific Knapsack Algorithm](http://stackoverflow.com/questions/40475287/specific-knapsack-algorithm) – marcelovca90 Nov 07 '16 at 21:59

1 Answers1

0

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

marcelovca90
  • 2,673
  • 3
  • 27
  • 34
  • Man why nobody hepl me ;/ I read this article I created a K array but It doesn't help me ... – Zaroos77 Nov 07 '16 at 22:03
  • 1
    Link-only answers are not good-quality answers because they cease to be useful if the link stops working. Please include the essential details of the link in your answer. – Andy Turner Nov 07 '16 at 22:11