D


私信TA

用户名:ALS1111

访问量:19674

签 名:

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

  自我简介:

TA的其他文章

python-巧克力
浏览:241
python-2^k进制数
浏览:314
python-能量项链
浏览:209

解题思路:

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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区