货币找零问题的动态规划解法

算法分析题

货币找零问题

(1)证明最优性原理

我们想采用动态规划方法解决此类问题,就必须证明其最优性原理成立。 所谓最优性原理,就是指无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列。

举个例子来说明什么是初始状态,什么是初始决策,什么是初始决策所导致的初始状态。
假设 s , v 1 , v 2 , . . . , v k − 1 , t s,v_1,v_2,...,v_k-1,t s,v1,v2,...,vk1,t 是一条由s到t的最短路径,初始状态为s,已经做出了从 s − v 1 s-v_1 sv1的初始决策,因此 v 1 v_1 v1就是初始决策所产生的状态。因此后面的决策必须相对于 v 1 v_1 v1构成一个最优决策序列。因此该例子满足最优性原理。
归纳证明最优性原理的办法
STEP 1: 设最优决策序列的形式
STEP 2: 明确初始状态和初始决策,确定初始决策所产生的状态 a a a
STEP 3: 证明在最优决策序列中,状态 a a a后面的其余决策相对于状态a一定是最优决策序列。

(2) 写出递推关系式

本题我们假设货币面额有1,2,4,5,10,给出金额n。求出最少的货币数量

// 递推关系式
vector<int>v={1,2,4,5,10}; //存取货币系统
int a[n]; // a[i]表示金额为i时最少需要多少货币
if i-v[j] > 0
a[i]=min{a[i],a[i-v[j]]+1};// 

货币找零问题中的贪心与动态规划

什么样的情况可以用贪心做?什么样的情况必须采用动态规划?
对于一个货币系统 d 1 , d 2 , d 3 . . . . d m d_1,d_2,d_3....d_m d1,d2,d3....dm ,如果前n-1项的和都不超过第n项的值,则符合贪心规则。如果前n-1项之和不在总小于第n项,此时贪心不在成立,必须采用动态规划的递推关系式进行求解。例如:对于货币系统1,2,4,5,10,8元如果用贪心查找,每次都选最大的,那我们找不到解,而实际上可以用两张4元就可以解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值