characterize the structure of an optimal solution. # 確定解的結構這類問題會給乙個陣列,要求返回與和為奇(偶)數/積為正(負)數有關的子陣列相關的一些性質(數目,長度等),本質上是狀態數為2的動態規劃問題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. )
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...