Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int main(void)
- {
- int **matrix, *w, *v, m, n;
- //Allocating
- w = (int *)malloc((m+1)*sizeof(int));
- v = (int *)malloc((m+1)*sizeof(int));
- matrix = (int **)malloc((m+1)*sizeof(int*));
- int i, j;
- for(i = 0; i <= m; i++)
- matrix[i] = (int*)malloc((n+1)*sizeof(int));
- //My test
- m = 3; n = 7;
- w[0] = 0; w[1] = 3; w[2] = 4; w[3] = 5;
- v[0] = 0; v[1] = 3; v[2] = 4; v[3] = 6;
- ///////////////////////////////////////
- //Algoritm
- for(i = 0; i <= m; i++) matrix[i][0] = 0;
- for(i = 0; i <= n; i++) matrix[0][i] = 0;
- for(i = 1; i <= m; i++)
- {
- for(j = 1; j <= n; j++)
- {
- if(w[i] <= j && matrix[i-1][j] < v[i] + matrix[i-1][j-w[i]])
- {
- matrix[i][j] = v[i] + matrix[i-1][j-w[i]];
- }
- else
- {
- matrix[i][j] = matrix[i-1][j];
- }
- }
- }
- //Matrix look
- printf("Matrix: \n");
- for(i = 1; i <= m; i++)
- {
- for(j = 1; j <= n; j++)
- {
- printf("%2d ", matrix[i][j]);
- }
- putchar('\n');
- }
- //Reconstruction
- i = m; j = n;
- printf("\n\nOptimal weight: %d\n", matrix[m][n]);
- printf("For optimal solution we use these items: ");
- while(matrix[i][j] > 0)
- {
- if(matrix[i][j] == matrix[i-1][j]) //skip
- {
- i--;
- }
- else
- {
- printf("\n%d -> weight: %d | value: %d", i, w[i], v[i]);
- matrix[i][j] = matrix[i-1][j-w[i]];
- j -= w[i];
- i--;
- }
- }
- putchar('\n');
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement