動態規劃主要是採用遞推以及局部結果複用來進行計算處理。比較清晰的一個例子就是斐波拉契數列,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
這樣枚舉填表,就可以找到最優方案
同樣的原理,也可以處理長方體分割爲正方體問題。