// Comment //Inputs: int[] denoms = {25,10,5,1}; int[][] map = new int[100+1][denoms.length]; System.out.println(makeChange(100, denoms, 0)); System.out.println(makeChangeDP(100, denoms, 0, map)); // Recursive algorithm public static int makeChange(int amount, int[] denoms, int index) { if(index >= denoms.length-1) return 1; int denomAmount = denoms[index]; int ways = 0; for(int i = 0; i*denomAmount <= amount; i++) { int amountRemaining = amount-i*denomAmount; ways += makeChange(amountRemaining, denoms, index+1); } return ways; } // Dynamic programming.. map[amount+1][denoms.length] public static int makeChangeDP(int amount, int[] denoms, int index, int[][] map) { if(map[amount][index] != 0) return map[amount][index]; if(index >= denoms.length-1) return 1; int denomAmount = denoms[index]; int ways = 0; for(int i = 0; i*denomAmount <= amount; i++) { int amountRemaining = amount-i*denomAmount; ways += makeChange(amountRemaining, denoms, index+1); } map[amount][index] = ways; return ways; }
Saturday, September 6, 2014
Coin change problem
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment