dp的一些技巧(持續更新)

2021-09-26 09:47:52 字數 577 閱讀 8665

刷題的時候學到的一些

1.有時候,可以在開頭多加一列(一行),可以方便計算

2.如果二維dp只用到前面一行,可以只保持兩行以節省記憶體,使用swap(甚至可以優化到一行)

如果一維dp只用到前乙個,可以只保持兩個變數

3.如果兩個物件採用相同的最優策略來做一件事的話,dp的狀態往往是:先做的那個物件的什麼什麼。參考stone game。

寫狀態和轉移方程的一些方法:

0.寫狀態最重要的一點:給出和題目相同的條件(不過是更小一些的),然後求這個條件下和題目相同或者不同的目的。

一定看: 最後一部分。

另外,結合揹包:

1.狀態的定義要使相互之間有關係。後面的狀態能夠用之前的表示出來。

2.如果是乙個集合中取一些構成另乙個集合的方法,dp的時候如果乙個元素和另乙個元素相等,那麼分兩種情況:用這個元素,和不用這個元素。參考115題。

3.思維不要禁錮住。比如leetcode:188以前做相關dp的時候,定義狀態基本上都是:以哪乙個為結尾完成了什麼事。然而這裡定義的狀態沒有,它只是說已經完成了什麼,並沒有說在當天必須完成一件,這樣轉移方程好寫一些。

持續更新 一些結論與技巧

n 個節點無向完全圖的不同生成樹個數有 n 個 證明 無標號的樹個數 點數為 n 另一邊點數為 m 共有 n m 條邊的帶標號完全二分圖生成樹個數為 n m 1 m n 1 證明 將乙個長度為 n 的序列a變成嚴格單調遞增序列至少需要改的元素個數 構造陣列 b i a i i 求b的最長不下降子串行...

linux的一些使用技巧(持續更新)

這個是上交的課件,我是一路學過來的,上面有linux的簡單使用 關亍執行檔案路徑癿變數 path 檔案不目弽癿檢規 ls list list files dirs e.g.ls l 複製 刪除不移勱 cp,rm,mv 直接檢規檔案內容 cat,tac,nl 可翻頁檢規 more,less 修改檔案時...

一些函式(持續更新)

itertools模組的zip longest對於巢狀list的使用 文章中在變換句子矩陣的時候使用了itertools模組的zip longest函式。使用方法如下 batch list itertools.zip longest batch,fillvalue pad fillvalue就是要填...