题意:输入:不同面值的硬币数组和总金额,输出:使用最少枚硬币凑成总金额,如果找不到这样的组合,返回-1
思路:dynamic procedure,参考http://blog.csdn.net/happyaaaaaaaaaaa/article/details/50976088
public int coinChange(int[] coins, int amount) {
//dynamic process
int dp[] = new int[amount + 1]; //find dp[amount]
for(int i = 1; i <= amount; i++)
dp[i] = 0x7ffffffe; //Integer.Max_VALUE = dp[i] + 1
/*
*dp[i] represent coin number to make up i.
*/
for(int coin : coins)
for(int i = coin; i <= amount; i++)
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
return dp[amount] == 0x7ffffffe ? -1 : dp[amount];
}