硬币问题-动态规划

问题描述

假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少?

问题分析

我们先假设一个函数 d(i) 来表示需要凑出 i 的总价值需要的最少硬币数量
1.i = 0时候,d(i) = 0
2.i = 1时候,d(i) = 1
3.i = 2时候,d(i)=2
4.i = 3时候,d(i) = 1
...
有 d(i) = d(j) + 1
d(i)表示这一步的最优解,d(j)表示上一步的最优解,上一步的最优解加上一枚硬币就能得出这一步的最优解,这一枚硬币可能是1元,3元,5元,所以如下
d(i) = d(i - 1) + 1;//加一个1元硬币
d(i) = d(i - 3) + 1;//加一个3元硬币
d(i) = d(i - 5) + 1;//加一个5元硬币
由于我们要求出最少的硬币数量,所以我们比较d(i - 1),d(i - 3),d(i - 5)拿出最小的值,这个最小的值加1就是我们要求的结果

代码

你可能感兴趣的:(硬币问题-动态规划)