動態規劃常見思路分享總結

2021-10-10 18:44:50 字數 1163 閱讀 2006

那幾乎可以肯定,考察的是動態規劃技巧,時間複雜度一般都是 o(n^2)。

int n = array.length;

int[

] dp =

newint

[n];

for(

int i =

1; i < n; i++

)}

符合歸納法,可以找到狀態轉移的關係。

int n = arr.length;

int[

] dp =

newdp

[n][n]

;for

(int i =

0; i < n; i++

)}

這種思路運用相對更多一些。

尤其是涉及兩個字串/陣列的子串行。

本思路中 dp 陣列含義又分為「只涉及乙個字串」和「涉及兩個字串」兩種情況。

(比如最長公共子串行),dp 陣列的含義如下:

在子陣列arr1[0…i]和子陣列arr2[0…j]中,我們要求的子串行(最長公共子串行)長度為dp[i][j]。(比如最長回文子串行),dp 陣列的含義如下:

在子陣列array[i…j]中,我們要求的子串行(最長回文子串行)的長度為dp[i][j]。

1.組合問題。

2.true、false問題。

3.最大最小問題。

專案value

組合問題:

377. 組合總和

組合問題:

494. 目標和

組合問題:

518. 零錢兌換 ii

true、false問題:

139. 單詞拆分

true、false問題:

416. 分割等和子集

最大最小問題:

474. 一和零

最大最小問題:

322. 零錢兌換

dp[i] += dp[i-num]
dp[i] = dp[i] or dp[i-num]
dp[i] = min(dp[i], dp[i-num]+1)

dp[i] = max(dp[i], dp[i-num]+1)

以上三組公式是解決對應問題的核心公式。

動態規劃解題思路

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

動態規劃解題思路

一直以來,對動態規劃的理解處於乙個模糊的狀態,就是一種似乎懂但遇到問題未必能行的狀態 然後,最近重點在leetcode上找了一些動態規劃的題目做了一下,逐漸有了一些思路。我覺得leetcode上對動態規劃思想的概括非常到位,所以記錄在這裡 動態規劃 英語 dynamic programming,簡稱...

動態規劃做題思路

1 計數 2 求最大值最小值 3 求存在性 一 確定狀態 1 最後一步 2 確定子問題 二 轉移方程 三 初始條件和邊界情況 四 計算順序 有2元,5元,7元硬幣,求組合成27元硬幣所用最少硬幣數。找出最後一步 最優策略是k枚硬幣a1,a2 ak加起來是27 最後一枚為ak,則前面的面值加起來是27...