首页 > 技术文章 > 动态规划算法

xiaofeiyang 2020-07-01 15:34 原文

1、最优子结构

有面值分别为1,3,5的三种硬币若干,需要凑成11元最少需要多少硬币,凑成n元最少需要多少硬币?

凑成0元需要0个硬币 //d(0)=0

凑成1元需要1个1元硬币 //d(1)=d(0)+1

凑成2元需要2个1元硬币 //d(2)=d(1)+1

凑成3元需要3个1元硬币或者1个3元硬币,那么我们选择1个3元硬币 //d(3)=min{d(2)+1,d(3-3)+1}

凑成4元需要1个3元硬币,1个1元硬币 //d(4)=d(3)+1;

凑成5元需要1个3元硬币,2个1元硬币或者1个5元硬币,那么我们选择1个5元硬币 //d(5)=min{d(4)+1,d(5-5)+1},为d(4)+1 =  1个3元硬币,2个一元的硬币,d(2)+1,也就是一个3元硬币,2个一元硬币,d(0)+1一个一元硬币

。。。。

抽离出来d(i)=min{ d(i-1)+1,d(i-vj)+1 },其中i-vj >=0,vj表示第j个硬币的面值;因为只有1张面值vj的加上剩余的d(i-vj)就可以算出所有有可能的解,做一个

首先要抽离出最优子结构,其中d(i-1)+1,d(i-vj)+1

2、边界

d(0)

3、状态转移公式

d(i)=min{ d(i-1)+1,d(i-vj)+1 }

 

推荐阅读