Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class Main {
- public static int knapsack(int matriz[][], boolean inside[][], int[] values, int id, int value) {
- if (!inside[id][value]) {
- if (value == 0) {
- matriz[id][value] = 0;
- } else if (id == values.length) {
- matriz[id][value] = 12345678;
- } else if (value >= values[id]) {
- matriz[id][value] = Math.min(knapsack(matriz, inside, values, id + 1, value),
- 1 + knapsack(matriz, inside, values, id + 1, value - values[id]));
- } else if (value < values[id]) {
- matriz[id][value] = knapsack(matriz, inside, values, id + 1, value);
- }
- inside[id][value] = true;
- }
- return matriz[id][value];
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Scanner in = new Scanner(System.in);
- int cases = in.nextInt();
- for (int a = 0; a < cases; a++) {
- int price = in.nextInt();
- int n = in.nextInt();
- int matriz[][] = new int[n + 1][10001];
- boolean[][] inside = new boolean[n + 1][10001];
- int values[] = new int[n];
- for (int i = 0; i < n; i++) {
- values[i] = in.nextInt();
- }
- for (int b = 0; b < n + 1; b++) {
- for (int c = 0; c < 10001; c++) {
- matriz[b][c] = 12345678;
- }
- }
- for (int value=price;value<matriz[n].length;value++) {
- if (knapsack(matriz,inside,values,0,value)!=12345678) {
- System.out.println(value+" "+knapsack(matriz,inside,values,0,value));
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment