動態規劃的通用解法和案例

2021-10-09 06:57:13 字數 2270 閱讀 4317

characterize the structure of an optimal solution. # 確定解的結構

recursively define the value of an optimal solution. # 寫出遞迴關係

compute the value of an optimal solution, typically in a bottom-up fashion. # 自底向上實現

(construct an optimal solution from computed information. )

這類問題會給乙個陣列,要求返回與和為奇(偶)數/積為正(負)數有關的子陣列相關的一些性質(數目,長度等),本質上是狀態數為2的動態規劃問題

1524. number of sub-arrays with odd sum

這道題的目的是找出所有和為奇數的子陣列的數目。思路是找到遞迴關係:

示例**:

def

numofsubarrays

(self, arr: list[

int])-

>

int:

ifnot arr:

return

0

even =

0 odd =

0 res =

0for x in arr:

if x %2==

0:even, odd = even +

1, odd

else

: even, odd = odd, even +

1

res += odd

return res %(10

**9+7

)

1567. maximum length of subarray with positive product

這道題的目的是返回最長的積為正數的子陣列的長度。思路同樣是從遞迴關係入手

示例**

def

getmaxlen

(self, nums: list[

int])-

>

int:

pos =

0 neg =

0 res =

0for num in nums:

if num ==0:

pos =

0 neg =

0elif num >0:

pos +=

1 neg = neg +

1if neg else

0else

:if neg ==0:

pos, neg =

0, pos +

1else

: pos, neg = neg +

1, pos +

1 res =

max(res, pos)

return res

1143. longest common subsequence

確定最優子結構

定義序列 x=⟨

x1,x

2,⋯,

xm⟩,

y=⟨y

1,y2

,⋯,y

n⟩

x = \langle x_1, x_2, \cdots, x_m \rangle, y= \langle y_1, y_2, \cdots, y_n \rangle

x=⟨x1​

,x2​

,⋯,x

m​⟩,

y=⟨y

1​,y

2​,⋯

,yn​

⟩,x,

yx, y

x,y有最長公共子串行z=⟨

z1,z

2,⋯,

zk

⟩z = \langle z_1, z_2, \cdots, z_k \rangle

z=⟨z1​

,z2​

,⋯,z

k​⟩.

寫出遞迴解

定義 c[i

,j

]c[i,j]

c[i,j]

為 xi

x_ixi

​ 和 y

jy_j

yj​ 的lcs長度.

else if xi=

yj

x_i = y_j

xi​=yj

​ else

動態規劃經典案例

程式設計師 面試指南 it名企演算法與資料結構題目最優解 左程雲 有n級台階,乙個人每次上一級或者兩級,問有多少種走完n級台階的方法,當n為1時,f n 1,n為2時,f n 2,就是說當台階只有一級的時候,方法數是一種,台階有兩級的時候,方法數為2。那麼當我們要走上n級台階,必然是從n 1級台階邁...

最大子段和問題動態規劃解法和分治策略解法深度分析

給定由n個整數 包括負整數 組成的序列a1,a2,an,求該序列子段和的最大值。當所有整數均為負值時定義其最大子段和為0。定義輔助子段陣列bj bi是1到j位置的最大子段和 必須包括bj 由bj的定義易知,當bj 1 0時bj bj 1 aj,否則bj aj。則計算bj的動態規劃遞迴式 bj max...

動態規劃系列(2) 01揹包問題的動態規劃解法

問題 有n 個物品,它們有各自的重量和價值,現有給定容量的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?dynamic programming 0 1 package problem include include include using namespace std struct item i...