import java.util.*;
public class Solution {
/**
* 最少货币数
* @param arr int整型一维数组 the array
* @param aim int整型 the target
* @return int整型
*/
public int minMoney (int[] arr, int aim) {
int[] dp = new int[aim+1];
dp[0] = 0;
int MAX = 10000; // Integer.MAX_INT 直接设置成最大值时 会发现 在 例如235 在i=3 时
//dp[i-arr[j]] +1 会从最大值变成最小值溢出了 所以需要注意
for(int i =1;i<=aim;i++) dp[i] = MAX;
for(int i = 0; i<= aim ; i++){
for(int j = 0; j<arr.length; j++ ){
if(i < arr[j]) continue;
dp[i] = Math.min(dp[i], dp[i-arr[j]] +1);
}
}
if(dp[aim] == MAX) return -1;
else return dp[aim];
}
}