狀態轉移方法是乙個線性的轉移,每一行依次求解。
例題:三角形最大路徑
最長上公升子串行和如何得到該序列
乙個非dp的nlgn演算法
最長子序列
編輯距離
多次編輯距離
這道題目思路不難,但是細節很多,需要統一處理儲存的三角形和dp的座標對應的關係。
# 自下往上做更方便
n =int
(input()
)# 這裡我多開了一些dp的空間,這樣可以簡化初始化的問題
dp =[[
0]*(n+1)
for _ in
range
(n+2)]
# 這裡注意好座標對應,從1開始,到n 結束
s =[[0
]]for i in
range
(n):
a =list
(map
(int
,input()
.split())
)for i in
range
(n,0,-
1):for j in
range
(i):
dp[i]
[j]=
max(dp[i+1]
[j], dp[i+1]
[j+1])
+s[i]
[j]print
(dp[1]
[0])
dp的思路,dp[i]
維護了乙個陣列前 i 個數字情況下,且取當前數字的最大值。
class
solution
:def
lengthoflis
(self, nums: list[
int])-
>
int:
## 時間複雜度是o(n2)
ifnot nums:
return
0 n =
len(nums)
dp =[1
]*nfor i in
range
(n):
for j in
range
(i):
if nums[i]
>nums[j]
: dp[i]
=max
(dp[i]
, dp[j]+1
)return
max(dp)
維護乙個陣列f[i]
,每次記錄從**轉移過來。最後進行還原即可。
class
solution
:def
lengthoflis
(self, nums: list[
int])-
>
int:
## 時間複雜度是o(n2)
ifnot nums:
return
0 n =
len(nums)
dp =[1
]*nf =[0
]*nfor i in
range
(n):
for j in
range
(i):
if nums[i]
>nums[j]
:if dp[j]+1
>dp[i]
: f[i]
= j dp[i]
=max
(dp[i]
, dp[j]+1
) max_ =
max(dp)
i = dp.index(max_)
ans =
while
len(ans)
) i = f[i]
print
(ans)
return max_
另外乙個問題就是可以給出乙個nlgn的演算法,這裡寫出。利用了二分的思路。
維護乙個嚴格單調遞增的序列。
class
solution
(object):
deflengthoflis
(self, nums)
:## 如果 cell 中元素都比它小,將它插到最後。否則,用它覆蓋掉比它大的元素中最小的那個。
## 這裡的cell並不是實際上的數字,但是長度是正確的
ifnot nums:
return
0 n =
len(nums)
cell =
[nums[0]
]for i in nums[1:
]:if i>cell[-1
]:else
: m =
len(cell)
right = m-
1 left =
0# 二分查詢插入的位置,取替換相關位置上,最小的
# 二分的目標,找到小於這個數字的最大值,因此選left
其實也只是對編輯距離的問題進行了應用。**這裡不具體寫了,思路是對於每個帶估計的字串,都與匹配字串陣列進行依次計算,看看最短編輯距離是多大,然後與操作次數限制進行比較。時間複雜度是o(n
m∗100)
o(nm*100)
o(nm∗1
00)
Python專題講解
python中的切片表示法 使用python實現乙個迴圈輸入 在python中複製乙個列表list 理解python的引數傳遞 理解python雙星和單星對引數的作用 理解python中的作用域規則 python中yield關鍵字的作用 在python中呼叫外部命令 if name main 的作用...
動態規劃專題 1 簡單線性DP
本專題文章建立在本人多年寫動態規劃 的經驗上,用以自己回顧總結,也幫助朋友初步理解,部分理解可能和教科書有所出入,要參加演算法考試的同學請以教科書為準。在現實生活中,有一類活動的過程,由於它的特殊性,可將過程分成若干個互相聯絡的階段,在它的每一階段都需要作出決策,從而使整個過程達到最好的活動效果。因...
專題 線性基
線性基性質 線性基中所有的數都可以經過一些異或操作還原出原數列。線性基任意幾個元素異或起來不為 0 若這是原數列的線性基,那麼這一定是滿足性質 1,2 的元素最少的一種構造方案。線性基推論 最多需要 mathrm 個數,就可以通過異或操作轉化為乙個數列。構造線性基 void add ll x,int...