// 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