解题思路:
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 人评分
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:546 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1261 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:760 |
简单的a+b (C语言代码)浏览:574 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1323 |
链表数据求和操作 (C语言代码)浏览:1035 |
简单的事情 (C语言代码)浏览:679 |
分解质因数 (C++代码)浏览:1561 |
检查金币 (C语言代码)浏览:1505 |