eulaliaaires

knapsack done

May 16th, 2018
146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.45 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.  
  5.     public static int knapsack(int matriz[][], boolean inside[][], int[] values, int id, int value) {
  6.         if (!inside[id][value]) {
  7.             if (value == 0) {
  8.                 matriz[id][value] = 0;
  9.             } else if (id == values.length) {
  10.                 matriz[id][value] = 12345678;
  11.             } else if (value >= values[id]) {
  12.                 matriz[id][value] = Math.min(knapsack(matriz, inside, values, id + 1, value),
  13.                         1 + knapsack(matriz, inside, values, id + 1, value - values[id]));
  14.             } else if (value < values[id]) {
  15.                 matriz[id][value] = knapsack(matriz, inside, values, id + 1, value);
  16.             }
  17.             inside[id][value] = true;
  18.         }
  19.         return matriz[id][value];
  20.     }
  21.  
  22.     public static void main(String[] args) {
  23.         // TODO Auto-generated method stub
  24.         Scanner in = new Scanner(System.in);
  25.         int cases = in.nextInt();
  26.         for (int a = 0; a < cases; a++) {
  27.             int price = in.nextInt();
  28.             int n = in.nextInt();
  29.             int matriz[][] = new int[n + 1][10001];
  30.             boolean[][] inside = new boolean[n + 1][10001];
  31.             int values[] = new int[n];
  32.             for (int i = 0; i < n; i++) {
  33.                 values[i] = in.nextInt();
  34.             }
  35.             for (int b = 0; b < n + 1; b++) {
  36.                 for (int c = 0; c < 10001; c++) {
  37.                     matriz[b][c] = 12345678;
  38.                 }
  39.             }
  40.  
  41.             for (int value=price;value<matriz[n].length;value++) {
  42.                 if (knapsack(matriz,inside,values,0,value)!=12345678) {
  43.                     System.out.println(value+" "+knapsack(matriz,inside,values,0,value));
  44.                     break;
  45.                 }
  46.  
  47.         }
  48.  
  49.     }
  50. }
  51. }
Advertisement
Add Comment
Please, Sign In to add comment