最近看了九章演算法的動態規劃班,受益匪淺,一點簡要的筆記分享給大家
什麼是動態規劃?
簡而言之,就是計算並儲存小問題的解,並將這些解組合成大問題的解。
動態規劃題目的特點:
1、計數
(1)有多少種方式走到右下角
(2)有多少種方法選出k個數使得和為sum
2、求最大值最小值
(1)從左上角到右下角路徑的最大數字和
(2)最長上公升子串行長度
3、求存在性
(1)取石子遊戲,先手是否必勝
(2)能不能選出k個數使得和為sum
問題1:使用最少的硬幣數量組成27,硬幣面額有三種:2、5、7
總結:求最值型動態規劃
此題也可以採用遞迴的方法實現,但是由於遞迴的重複性計算會導致時間複雜度太高。
動態規劃的組成部分:
1、確定狀態
(1)最後一步(最優策略中使用的最後一枚硬幣ak)
(2)化成子問題(最少的硬幣拼出更小的面值27-ak)
2、轉移方程
f[x]=min
3、初始條件和邊界情況
f[0]=0, 如果不能拼出y,使f[y]為正無窮
4、計算順序
f[0]、f[1]、f[2]…
這裡是我用c++實現的**片段:
九章演算法筆記D1 動態規劃概述
tags 大家覺得寫還可以,可以點讚 收藏 關注一下吧!也可以到我的個人部落格參觀一下,估計近幾年都會一直更新!和我做個朋友吧!計數型 機械人 存在型 青蛙跳石子 機械人2 座標型 leetcode256 粉刷房子 序列型 decode ways 確定狀態 確定轉移方程 初始條件和邊界情況 計算順序...
第九章 動態規劃 1305 Maximum sum
輸入樣例 110 1 1 2 2 3 3 4 4 5 5 輸出樣例 13 提示 就是求最大子段和問題,樣列取2,2,3,3,4和5,baidu搜poj 2479 maximum sum,可獲得大量經典最大子段和問題的題目解析,本題o n2 演算法超時,必須用o n 演算法。思路 從左到右分別求出它們...
第九章(二)DAG上的動態規劃
dag上的動態規劃 有向無環圖上的動態規劃是學習dp的基礎,很多問題都可以轉化為dag上的最長路 最短路或路徑計數問題。1.沒有明確固定起點重點的dag模型 巢狀矩形問題 有n個矩形,每個矩形可以用兩個整數a b表示它的長和寬,矩形可以巢狀在矩形中當且僅當a選出盡量多的矩形排成一行,使得除了最後乙個...