问题:
考虑用最少的硬币找 n 美分零钱的问题。假定每种硬币的面额都是整数。
a. 设计贪心算法求解找零问题,假定有25美分、10美分、5美分和1美分4中面额的硬币。
b. 设计一组硬币面额,使得贪心算法不能保证得到最优解。这组硬币面额中应该包含1美分,使得对每个零钱值都存在找零方案。
c. 设计一个 O(nk) 时间的找零算法,适用于任何 k 种不同面额的硬币,假定总是包含1美分硬币。
d. Leetcode 剑指 Offer II 103. 最少的硬币数目 为类似题目,代码也贴在下面
参考作答:
a. 每次选择不大于剩余未找零的面额最大的硬币进行找零,然后对剩余未找零进行更新,直到找零完成
b. 设只有面额为{1,6,8}三种硬币,需找零12美分
1)若按照贪心算法,得到的找零序列为{8,1,1,1,1},共4枚硬币
2)但实际最优解为{6,6},共2枚硬币
Q: 满足什么条件的硬币可以使用贪心算法? 我也没想出来,求大神解答
c. 使用动态规划的思想,优化方程为
dp[ i ]