刷題的時候學到的一些
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就是要填...