動態規劃可分爲兩種:
一是沒有約束條件的動態規劃,比如剪繩子,跳臺階。
二是有約束條件的動態規劃,比如揹包問題。
1.剪繩子
從小往大遞推:
f(1)=1
f(2)=f(1)*f(1) =1
f(3)=f(2)*f(1)
f(4)=f(3)*f(1) 或者是 f(2)*f(2)
寫兩層for循環,第一層for循環是對數字n進行遍歷,第二層for循環是對f(n)的計算進行遍歷,比較是f(j)*f(h)大,還是直接j*h大(切分兩段)
類似的題目可以是:
寫出到自然數n爲止,加和等於n的數字集合。
比如n=2,返回結果爲[1,1],
n=3,返回結果爲[1,2],[1,1,1]
2.揹包問題
https://zhuanlan.zhihu.com/p/107139719
https://zhuanlan.zhihu.com/p/93857890
https://www.bilibili.com/video/av33930433?from=search&seid=10637513335818789097
0-1揹包問題的數學描述。
https://www.cnblogs.com/chiweiming/p/8621374.html
注意初始化不能用第一種,第一種是錯的。賦值的時候不是想象中那樣,應該是地址問題。
語法糖不能隨便亂用https://blog.csdn.net/five3/article/details/83474633
3.買賣股票的最大時機
1.二層遍歷,超時
2.一層遍歷,用一個變量來記錄前面出現過的最小值。