动态规划主要是采用递推以及局部结果复用来进行计算处理。比较清晰的一个例子就是斐波拉契数列,f(n) = f(n – 1) + f(n – 2)
把每次的计算结果保存起来,就可以方便的得到下一个数据了。这样的规划处理方式比直接递归处理要快很多。
动态规划的经典应用是背包问题。
https://blog.csdn.net/chanmufeng/article/details/82955730
这里讨论长方形切分为正方形的问题,每次把边长为整数的长方形一分为二,求全部为正方形的最小个数。
这里我们讨论的是每次一分为二,所以不是完美正方形问题,
完美正方形
对于 5 *6 的长方形,采用贪婪法处理,先切一个5*5的,再对另一个1*5的进行切分,这样总共有6个正方形,
但还有更少的切分方法:
处理思路:采用枚举的动态规划方案,找到最优方式,
F(W, H) = 1 W = H 时
Min( F(W – a, H) + F(a, H) ) a = 1, 2, … W/2
Min (F(W, a) + F(W, H – a) ) a = 1, 2, … H./2
这样枚举填表,就可以找到最优方案
同样的原理,也可以处理长方体分割为正方体问题。