问题:
给一个钱数,用最少的纸币使之等于这个钱数。 比如, 纸币的面额为 1, 2, 5, 10。则如果给你15块钱,你只能返回一张10块,一张5块。
分析:
使用DP,创建一个数组,里面保存用0块到给定块数的最小纸币数。然后利用递归函数
F(n) = Min_{j \in 纸币面额}F(n - j ) + 1。
代码:
public static int findMinimumBills(int amount, int[] billType) {
if (amount == 0) return 0;
// the minimum number of bills for each amount of money, begins with 0
int[] count = new int[amount + 1];
count[0] = 0;
for (int i = 1; i <= amount; i++) {
int min = Integer.MAX_VALUE;
for (int j = 0; j < billType.length; j++) {
if (billType[j] <= i) {
if (min > count[i - billType[j]] + 1) {
min = count[i - billType[j]] + 1;
}
}
}
count[i] = min;
}
return count[amount];
}
本文介绍了一种基于动态规划的最少纸币找零算法,该算法能够计算出构成特定金额所需的最少纸币数量。通过递归公式 F(n) = Min_{j\in纸币面额}
2835

被折叠的 条评论
为什么被折叠?



