Advertisement
bokunda

[ALST] 0/1 Knapsack Problem - Problem ranca

Nov 17th, 2017
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.     int **matrix, *w, *v, m, n;
  7.  
  8.     //Allocating
  9.     w = (int *)malloc((m+1)*sizeof(int));
  10.     v = (int *)malloc((m+1)*sizeof(int));
  11.  
  12.     matrix = (int **)malloc((m+1)*sizeof(int*));
  13.     int i, j;
  14.     for(i = 0; i <= m; i++)
  15.         matrix[i] = (int*)malloc((n+1)*sizeof(int));
  16.  
  17.     //My test
  18.     m = 3; n = 7;
  19.     w[0] = 0; w[1] = 3; w[2] = 4; w[3] = 5;
  20.     v[0] = 0; v[1] = 3; v[2] = 4; v[3] = 6;
  21.     ///////////////////////////////////////
  22.  
  23.     //Algoritm
  24.     for(i = 0; i <= m; i++) matrix[i][0] = 0;
  25.     for(i = 0; i <= n; i++) matrix[0][i] = 0;
  26.  
  27.     for(i = 1; i <= m; i++)
  28.     {
  29.         for(j = 1; j <= n; j++)
  30.         {
  31.             if(w[i] <= j && matrix[i-1][j] < v[i] + matrix[i-1][j-w[i]])
  32.             {
  33.                 matrix[i][j] = v[i] + matrix[i-1][j-w[i]];
  34.             }
  35.             else
  36.             {
  37.                 matrix[i][j] = matrix[i-1][j];
  38.             }
  39.         }
  40.     }
  41.  
  42.     //Matrix look
  43.     printf("Matrix: \n");
  44.     for(i = 1; i <= m; i++)
  45.     {
  46.         for(j = 1; j <= n; j++)
  47.         {
  48.             printf("%2d  ", matrix[i][j]);
  49.         }
  50.         putchar('\n');
  51.     }
  52.  
  53.     //Reconstruction
  54.     i = m; j = n;
  55.     printf("\n\nOptimal weight: %d\n", matrix[m][n]);
  56.     printf("For optimal solution we use these items: ");
  57.     while(matrix[i][j] > 0)
  58.     {
  59.         if(matrix[i][j] == matrix[i-1][j]) //skip
  60.         {
  61.             i--;
  62.         }
  63.         else
  64.         {
  65.             printf("\n%d -> weight: %d | value: %d", i, w[i], v[i]);
  66.             matrix[i][j] = matrix[i-1][j-w[i]];
  67.  
  68.             j -= w[i];
  69.             i--;
  70.         }
  71.     }
  72.  
  73.     putchar('\n');
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement