算法 【动态规划】兑换零钱(一) 求解代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public int minMoney (int[] arr, int aim) { int[] dp = new int[aim+1]; Arrays.fill(dp, Integer.MAX_VALUE); dp[0]=0; for(int i=0;i<arr.length;i++){ for(int j=arr[i];j<=aim;j++){ if(dp[j-arr[i]]!=Integer.MAX_VALUE){ dp[j]=Math.min(dp[j-arr[i]]+1,dp[j]); } } } return dp[aim]==Integer.MAX_VALUE?-1:dp[aim]; } 小贴士 dp[j] 表示的是凑出金额j所需的最少硬币数