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];

    }
}