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) { // write code here if (arr == null || arr.length < 1 || aim < 0) { return -1; } int n = arr.length; int[][] dp = new int[n][aim + 1]; for (int j = 1; j <= aim; j++) { if (j % arr[0] == 0) { dp[0][j] = j / arr[0]; } else { dp[0][j] = aim + 1; } } for (int i = 1; i < n; i++) { for (int j = 1; j <= aim; j++) { dp[i][j] = Math.min(dp[i - 1][j], aim + 1); if (j >= arr[i]) { dp[i][j] = Math.min(dp[i][j], dp[i][j - arr[i]] + 1); } } } return dp[n - 1][aim] > aim ? -1 : dp[n - 1][aim]; } }