/**
* 动态规划推到公式:
* dp[n]=min(dp[n-coin]+1), coin in coins
*
* @param arr
* @param aim
* @return
*/
public static int minMoney(int[] arr, int aim) {
// write code here
int[] dp = new int[aim + 1];
for (int value : arr) {
dp[value] = 1;
}
for (int i = 1; i < dp.length; i++) {
if (dp[i] == 0) {
dp[i] = Integer.MAX_VALUE;
}
for (int value : arr) {
if (i - value > 0 && dp[i - value] != Integer.MAX_VALUE) {
dp[i] = Math.min(dp[i], dp[i - value] + 1);
}
}
}
return dp[aim] == Integer.MAX_VALUE ? -1 : dp[aim];
}