动态规划问题之一,硬币问题。
问题描述
假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少?
输入硬币种类数量为number,需要凑出的金钱为money
接下来number列,输入所有的硬币种类money_list[]
问题分析
我们从凑出1元开始,依次递进,最终得到凑出11元的结果。
假设res_list[i] 为凑出i元所需要的硬币数量
我们生成状态转移方程:
res_list[i] =minj=1…number[res_list[i-coinj] + 1)],其中coinj为所有硬币种类硬币序列
即 当前凑出i的 最优解数量是凑出 i-coinj 的最优解 +1,且+1所代表的硬币是coinj。
res_list[0] 必定是0,res_list[1] = minj = 1… number[res_list[1-coinj] +1]
每次得到res_list[i]的值之后,都将当前的res_order[i-coinj]和coinj保存到res_order[i]中,作为硬币序列。
算法代码
1 | # 输入硬币种类数量和需要凑的金钱 |
算法代码点击 这里