動態規劃解決的問題思路分析

2021-10-06 06:17:06 字數 853 閱讀 1246

一般三類問題需要動態規劃來處理

1、最大最小值

2、計數型,比如從a-b有多少種走法?但是不會把每週走法都羅列出來,很多時候我們會把羅列的個數的的題也當成動態規劃,其實不是。

3、存在型,比如是否可以?是否能勝利等?

動態規劃的4個步驟

舉個列子:面值為2,5,7的硬幣,組裝27塊錢,最少需要多少枚?

第一步:確定狀態:什麼是狀態,簡單講就是要確定乙個陣列,陣列的每個元素f[i]就是代表乙個狀態,而且這個狀態的定義**於整個問題劃分成子問題後的意思:比如最少用多少枚硬幣拼出x面值?那麼測試f[x]就表示最少多少枚拼出x面值。確定狀態需要依賴兩個條件:

1.1、最後一步:最後一步也就是最後一枚硬幣的面值:會有三種,2,5,7。三種情況f(27)=1+f(25) or f(27) = 1+f(22) or f(27) = 1+f(20)三種情況。而我們需要求的是最少的硬幣個數:所以f(27)=min,三個中最小的那個。確定最後一步的目的就是要通過最後一步來推到除問題的子問題。

1.2、子問題:如:最少用多少枚硬幣拼出x面值

注意:其實動態規劃表示式都可以用遞迴的方式計算出來。但是重複計算很多消耗cpu。

第二步:根據狀態寫出轉移方程,意思就是寫出通用表示式: 比如這裡就是f(x)=min;其實轉移方程寫出來,動態規劃題就解決了一半。

第三步:確定方程的初始化條件和邊界情況;初始條件一般都是0,1,2這樣的,比如f(0)=? f(1)=? f(2)=?等等。而且初始條件的方程一般不能套用方程公式來計算而要用手動根據實際情況來算。

第四步:確定f(x)的計算順序,是從大到小還是從小到達,這個取決於f(x)中x的依賴,比如x依賴與x-2,x-5,x-7所以只能先把小的算了才能算出大的x。因此是從小到大的順序。

動態規劃 思考解決動態規劃問題

關於動態規劃,過了一段時間,自己給自己做乙個小結.給你一道題目 題目題意 乙個n n的方格.從 1,1 進去,從 n,n 出 每乙個交叉點都有花生,每次只能是向下或者向右走。讓你找出走過路線中能踩到的花生的數量最多是多少?給出的資料分析 驗證正確 思考 傳統思考方式 要思考這個幾個東西,但自己總覺得...

動態規劃解決TSP問題

題目描述 某推銷員要從城市 v1 出發,訪問其它城市v2,v3,v6 各一次且僅一次,最後返回v1。d為各城市間的距離矩陣。問 該推銷員應如何選擇路線,才能使總的行程最短?int d node number node number 每個點之間距離的矩陣 int path 6 6 行表示走到第幾步,列...

動態規劃解題思路

在leetcode上看題解與結合自己的想法得出思路。首先明確 dp 陣列所存資料的含義。這步很重要,如果不得當或者不夠清晰,會阻礙之後的步驟。然後根據 dp 陣列的定義,假設 dp 0 i 1 dp 0 i 1 都已知,想辦法求出 dp i dp i 一旦這一步完成,整個題目基本就解決了。但如果無法...