动态规划问题
矩阵连乘问题
-
Description
两个矩阵A(r行s列)和B(s行t列)相乘, 乘法代价为rst. 现给定N(N<=500)个矩阵连乘问题, 请计算最小乘法代价。 -
Input
第一行输入M(M<=10)表示有M组数据。每组数据第一行输入N,表示矩阵个数;接下来一行输入N个矩阵的行数和列数。 -
Output
*输出M行正整数,第i行表示第i组数据的最小乘法代价。 -
Sample Input
2
3
1 2 2 3 3 4
3
4 3 3 2 2 1 -
Sample Output
18
18
动态规划五部曲
- 确定dp数组及其含义
\(dp[i][j]表示A_i到A_j连乘的最小乘法代价\) - 确定递推公式
\(从A_i到A_j。如果在中间k处“断开”(即A_k后加了一个乘号) 则有dp[i][j]=dp[i][k]+dp[k+1][j]+p_{i-1}*p_k*p_j(p_i代表A_i的维数)\)
当然,k取值是从i~j-1的,所以有递推公式:
\[ dp[i][j] =
\begin{cases}
0 & \text{i=j} \\
min_{i\leq k<j}{dp[i][k]+dp[k+1][j]+p_{i-1}*p_k*p_j} &
\text{i<j}
\end{cases}
\]
- 初始化 dp[i][i]=0
- 确定遍历顺序 从小间隔到大间隔
- 举例推导