D


私信TA

用户名:ALS1111

访问量:22109

签 名:

等  级
排  名 55
经  验 11377
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

python-乘积最大
浏览:223
python-回文数
浏览:206
python-摆花摆花
浏览:143

解题思路:

1896-矩阵乘法,代码超限了,记录以下自己学到的思路吧

动态规划

①建立一个dp数组其中dp[i][j]表示第i个矩阵到第j个矩阵的最小乘法次数

②初始化dp[i][i] = 0(i = 1 to n)

③状态转移方程

dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]+A[i]*A[k+1]*A[j+1])



参考代码:

from cmath import inf  
  
  
def f(n):  
    A = [0]+[int(i) for i in input().strip().split()]  
    dp = [[inf for j in range(n+1)] for i in range(n+1)]  
  
    for i in range(1,n+1):  
        dp[i][i] = 0  
      
    for  t in range(1,n):        #t是每次在i的基础上加的值
        for i in range(1,n-t+1): #依次把相隔为[1 to n-1]的矩阵的最少乘法更新一遍,目的是在状态转换方程中引入第k个矩阵时使用
            j = i+t              
            for k in range(i,j):  
                dp[i][j] = min(dp[i][j], dp[i][k]+dp[k+1][j]+A[i]*A[k+1]*A[j+1])  
    print(dp[1][n])  
  
if __name__ == '__main__':  
   n = int(input().strip())  
   f(n)


 

0.0分

0 人评分

  评论区

  • «
  • »