Dynamic Programming[1]
建中資訊讀書會
- 225班
- 電子計算機研習社_學術長
- 綽號807
- 資讀講師(第1堂)
這我
區間 DP
針對一個區間做DP
區間間有一定的合併規則
阿不就是分治
區間DP
有兩個人,場上有n個數字x[i],兩人輪流移除頭或尾的一個數字,移除的數字總和就是得分,假設兩人皆聰明,求第一個人的最大得分。
dp[l][r]表示在l、r區間中第一個人比第二個人多拿的分數
對於l==r的情況,如果是第一個人拿那區間dp[l][r]=x[i]
第二個人 dp[l][r]=-x[i]
第一個人
dp[l][r]=max(dp[l+1][r]+x[l],dp[l][r-1]+x[r])
CSES1097 轉移式
第二個人
dp[l][r]=min(dp[l+1][r]-x[l],dp[l][r-1]-x[r])
O(n^2)
位元 DP
- 把每個是否轉為位元
- 一堆是否變為數字
位元DP
dp[i][c]表示最小秒數
c(二進)的0表示未打倒
1表示已打倒
i代表單前所在位置
dp[i][0]=i+1;
打倒
tmp=dp[i][c-j];
不整除t[i]: tmp=下一次地屬出現時間
dp[i][c]=min(dp[i][c],tmp)
O(n \times 2^n)
- 位元DP加難
- 他
SOS DP
矩陣快速冪優化
- 表格?
- 各種運算
矩陣
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
第二列
第一列
第一行
第二行
第三行
- 完全相同
- 行數、列數 相等
矩陣=
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
=
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
- 同位置對同位置相加
- 行數、列數 相等
矩陣+
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
+
\begin{bmatrix}
5 & 7 & 9\\
1 & 3 & 8
\end{bmatrix}
=
\begin{bmatrix}
6 & 9 & 12\\
5 & 8 & 14
\end{bmatrix}
- 如同加法
矩陣-
\begin{bmatrix}
6 & 9 & 12\\
5 & 8 & 14
\end{bmatrix}
-
\begin{bmatrix}
5 & 7 & 9\\
1 & 3 & 8
\end{bmatrix}
=
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
- 一一相乘
矩陣係數積
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
\times
5
=
\begin{bmatrix}
5 & 10 & 15\\
20 & 25 & 30
\end{bmatrix}
- 一一相乘
矩陣乘法
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
\times
\begin{bmatrix}
7 & 3\\
9 & 1\\
5 & 2
\end{bmatrix}
\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6
\end{bmatrix}
\begin{bmatrix}
7 & 3\\
9 & 1\\
5 & 2
\end{bmatrix}
\begin{bmatrix}
40 & 11\\
103 & 29
\end{bmatrix}
分治講過了
複習
快速冪
矩陣&快速冪
M=
\begin{bmatrix}
1 & 2\\
4 & 3
\end{bmatrix}
A \times M ^ n
求
A=
\begin{bmatrix}
1 \\
4
\end{bmatrix}
轉移式➡️矩陣
\begin{bmatrix}
1 & 1\\
1 & 0
\end{bmatrix}
dp[n-1]
dp[n-2]
dp[n-1]
dp[n]
\begin{bmatrix}
2 & 0 & 3 & 0 & 0\\
0 & 1 & 0 & 0 & 4\\
0 & 1 & 0 & 0 & 0\\
0 & 0 & 0 & 3 & 0\\
0 & 0 & 0 & 1 & 0
\end{bmatrix}
r_{n-1}
g_{n-1}
g_{n-2}
b_{n-1}
b_{n-2}
r_{n}
g_{n-1}
g_{n}
b_{n-1}
b_{n}
Copy of Dynamic Programming
By 建中店自計算機研習社學術長807⁸⁰⁷
Copy of Dynamic Programming
- 167