2 3 4

动态规划问题

矩阵连乘问题

  • 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
  • 确定遍历顺序 从小间隔到大间隔
  • 举例推导
posted @ 2022-05-13 09:48  kokomi~  阅读(86)  评论(0)    收藏  举报