链接在这里
动态规划,真难啊
题目
注意的点:
- 循环面值arr的时候,i是从0开始的;
- 循环dp[j]的时候,直接从面值开始循环就行,不然的话还需要判断是否小于面值。
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
int[] dp = new int[aim + 1];
dp[0] = 0;
for(int i = 1; i <= aim; i++){
dp[i] = aim + 1;
}
for(int i = 0; i < arr.length; i++){
for(int j = arr[i]; j <= aim; j++){
dp[j] = Math.min(dp[j], dp[j - arr[i]] + 1 );
}
}
return dp[aim] == aim + 1 ? -1 : dp[aim];
}
}