力扣 dp基礎問題思維構建

2022-05-09 03:03:10 字數 1307 閱讀 3929

1.198. 打家劫舍,很經典了。

2.213. 打家劫舍 ii,可轉化為198題。

3.典型連續子陣列問題:(之後單獨拎出來?區別於子串行問題)

3.1 53. 最大子序和,dp[i]表示以nums[i]為結尾的連續子陣列的最大和,可用滾動陣列優化。

4.72. 編輯距離,非常經典了,其實就是[i-1][j] [i][j-1] [i-1][j-1],其中-1地都表示原來的i或j被匹配上了。

5.揹包問題專題

5.1 416. 分割等和子集,轉換為0-1揹包問題,dp[i][j]表示前i個物品能否組和為和剛好為j的子集,如果可以就為true;那麼在選擇時如果nums[i]比揹包重量j大的話,就不能放進來,如果小的話,就可以選擇放或者不放。

5.2 474. 一和零,給定m個0和n個1,求最多包含的字串數目,相當於兩個揹包,狀態算上物品共是三維,經過空間優化,轉換為兩個揹包的二維狀態,但由於是0-1揹包問題需要從大到小更新。

5.3 494. 目標和,可以用dfs+記憶陣列來做,也可用0-1揹包來做,選擇有兩種+或-,這裡有一點特殊的是,和可能為負值,但是陣列下標不能為負,所以就+和的長度來平移一下下標,學到了。挺難的還。

5.4 322. 零錢兌換,完全揹包問題,狀態中不考慮物品了,只考慮重量,dp[i]=min(dp[i],dp[i-coins[j]]),一般都是當前揹包重量減去物品重量求個最小值。挺難的。

5.5 518. 零錢兌換 ii,完全揹包問題,求解組合數,需要先遍歷物品,dp[i][j] = dp[i - 1][j] + (j >= coins[i - 1] ? dp[i][j - coins[i - 1]] : 0),i是列舉硬幣,到當前容量j的時候,結果包括:不包含當前硬幣時組成j的數目+包含當前硬幣i時組成j的數目,可以優化為一維的dp[j]+=dp[j-c]。

5.6 70. 爬樓梯,完全揹包問題,求解排列數,需要遍歷容量,考慮物品的排列,所有結果,不是固定的,也就是排列數。

5.7 377. 組合總和 ⅳ,完全揹包問題,求組合數,結果可以重複,所以是對物品的排列,需要先遍歷容量,再遍歷物品。

6.279. 完全平方數,狀態轉移方程為dp[i]=1+min(dp[i-j^2]),其中j*j<=i,很牛的狀態轉移方程。

7.劍指 offer 60. n個骰子的點數,dp[i]表示和為i的結果次數, 遍歷每個骰子,遍歷容量,狀態轉移方程:針對第j個骰子,dp[i]=σk1-6 dp[i-k]。

回文子串行:

516. 最長回文子串行,dp[i,j]表示s[i:j]之間(閉區間)的最長回文子串行長度,從中間向外擴充套件。

dp 力扣 72 編輯距離

給你兩個單詞 word1 和 word2,請你計算出將 word1 轉換成 word2 所使用的最少運算元 你可以對乙個單詞進行如下三種操作 插入乙個字元 刪除乙個字元 替換乙個字元 示例 1 輸入 word1 horse word2 ros 輸出 3解釋 horse rorse 將 h 替換為 r...

力扣 DP正方形面積

分析 dp思想 首j先確定邊長 邊長受短邊影響 所以 dp i j min min dp i 1 j dp i j 1 dp i 1 j 1 1 獲取最小邊 同時為了少遍歷一次 直接儲存可以滿足正方形的最大邊 maxside max side,dp i j class solution maxsid...

力扣 32 最長有效括號 思維 棧

思路一 初始置cur ct 0cur ct 0 cur ct 0,如果遇到 就令cur ctcur ct cur ct 自增,否則令cur curcu r自減,ctct ct自增,那麼當cur 0cur 0 cur 0時說明當前子串匹配了,我們可以令ans max ans ct ans max an...