DP基礎(線性DP)總結

2022-08-21 21:06:13 字數 1113 閱讀 3416

前言:雖然確實有點基礎......但凡事得腳踏實地地做,基礎不牢,地動山搖,,,嗯!

dp方程:dp[i]=max

複雜度:o(n^2)

法一:資料結構無腦暴力優化

​ 以a[i]為陣列下標,從1到a[i]訪問最大值,再加一,進行更新

法二:設h[k]表示dp值為k的最長上公升子串行的最小值(有點貪心在裡面)

​ 顯然h[k]>=h[k-1](k>=2),證明:若存在h[k-1]>h[k],則h[k-1]可以從h[k]中轉移,故不存在h[k]>=h[k-1]

​ 所以我們可以通過二分查詢,找到乙個最大的h[k]滿足h[k]<=a[i],則dp[i]=k+1

兩種方法的複雜度都為o(nlogn)

dp方程:

dp[i][j]=max

dp[i][j]=max//若a[i]!=b[j]則說明a[i]或b[j]對於dp值無貢獻

複雜度:o(n^2)

優化:嗯......少數有特殊性質的題目可以將lcs轉化為優化lis來做。

小聲bb:最麻煩的來了

先說複雜度o(n*m^2)的吧:

設dp[i][j]表示a序列的前i個數和b序列的前j個數且以b[j]結尾構成的lcis長度

則若a[i]!=b[j]則需找到乙個a[k]與b[j]匹配(1<=k<=i-1),故a[i]對於dp[i][j]的值無貢獻,

所以dp[i][j]=dp[i-1][j]

若a[i]=b[j]則a[i]與b[j]匹配,所以dp[i][j]=max

然後是複雜度o(nmlogm)的:

考慮類似於優化lis的優化

設h[k]表示dp值為k的lcis的最後一位b[t]的最小值,顯然h[k]也一定滿足h[k]>=h[k-1]

故可以通過二分查詢來找到最大的h[k]滿足h[k]<=b[j],則dp[i][j]=k+1

最後是複雜度o(n*m)的:

我們需要找到b[t]b[j]&&dp[i-1][j]>dp[i-1][t])t=j;

}}

基礎線性DP總結

動態規劃是一種求解最優解的思想 通常情況下要分清楚動規和貪心,什麼時候用貪心,什麼時候用動規。動規方程 dp i j a i j max。每次從i,j走有兩種選擇下dp i 1 j 和 右下dp i 1 j 1 全域性最優解包含區域性最優解。動態規劃的核心是狀態轉移方程。這是數字三角形的基礎題。in...

線性dp 區間dp

1 尼克的任務 額一道挺水的題,愣是做了幾個小時 動態規劃大致的思路還是找乙個轉移 換個詞就是影響 我們可以明顯看出本題的規則 空暇時,一遇到任務必須挑乙個接 求1 n時間內最大空暇時間 所以將任務排序是必要的,兩個關鍵字 再來想象一下當我做到第i 個任務時,我在 st i st i t i 1 時...

簡單線性DP總結

首先 動態規劃適用的條件是該問題有最優子結構 無後效性 通過每個最優子結構狀態的遞推可以推出整體的最優解 對這些基本概念的理解既要理性也要一點點感性 dp問題解決順序是 1 確定狀態 通過最後一步將問題轉化為規模更小的子問題 2 轉移方程 3 初始條件與邊界情況 4 計算順序 其中前兩步是十分重要的...