动态规划法
动态规划(dynamic programming)
如果一个问题是由交叠的子问题组成,就可以运用动态规划法解决这个问题。
通过递推由子问题推出问题的解。动态规划法一般用于求解最优解问题。
最优化法则:问题的任一实例的最优解都是由其子实例的最优解构成的。
求解问题的关键:找出递推关系,写出递推式
1 币值最大化问题:一组硬币排成一行,币值无序,找出不相邻的硬币组成的最大币值。
f(n) = max(f(n-1),f(n-2)+C(n)) //最大值要么包含最后一个,要么不包含最后一个。
f(0) = 0, f(1)= C(1)
2 找零问题:需要找零为n,最少需要多少面值为d1,d2,d3,...dm的硬币。
f(n) = min(f(n-d1), f(n-d2),...f(n-dm)) + 1 //找出减一个后的最小值。
f(0) = 0