动态规划解决矩阵连乘
2011-12-12 19:16
267 查看
#include<iostream> using namespace std; #include<stdio.h> /*p是一维数组,记录矩阵的规模(第一个矩阵的行和其余矩阵的列); n是矩阵的个;m是二维数组,记录计算A[i:j],1<=i<=j<=n所需要的最少数乘次数m[i][j]; 相对应于m[i][j]的断开位置k记为s[i][j]*/ void MatrixChain(int *p,int n,int **m,int **s){ for(int i = 1;i <= n;i++) m[i][i] = 0; for(int r = 2;r <= n;r++) for(i = 1;i <= n-r+1 ; i++){ int j = i + r -1; m[i][j] = m[i+1][j] + p[i-1]*p[i]*p[j]; s[i][j] = i; for(int k = i+1;k < j;k++){ int t = m[i][k] + m[k+1][j] +p[i-1]*p[k]*p[j]; if(t < m[i][j]){ m[i][j] = t; s[i][j] = k; } } } } void Traceback(int i,int j,int **s){ if(i == j) { cout<<"A"<<i; return; } cout<<"("; Traceback(i,s[i][j],s); Traceback(s[i][j]+1,j,s); cout<<")"; } void main(){ int **s; int **m; int n; int *p; cout<<"输入矩阵个数:"; cin>>n; p = (int*)malloc((n+1) * sizeof(int)); s = (int**)malloc((n+1) * sizeof(int*)); for(int i = 1;i <= n;i++) s[i] = (int*)malloc((n+1) * sizeof(int)); m = (int**)malloc((n+1) * sizeof(int*)); for(i = 1;i <= n;i++) m[i] = (int*)malloc((n+1) * sizeof(int)); cout<<"输入矩阵规模:(第一个的行数和其余矩阵的列数)"; for( i = 0;i <= n;i++) cin>>p[i]; MatrixChain(p,n,m,s); Traceback(1,n,s); cout<<m[1] ; }
相关文章推荐
- 动态规划解决矩阵连乘问题
- 动态规划之矩阵连乘问题
- 动态规划(矩阵连乘)
- java实现动态规划求解矩阵连乘问题
- 0010算法笔记——【动态规划】矩阵连乘问题
- 动态规划之最优矩阵连乘
- C++动态规划解决矩阵连乘问题
- 动态规划——矩阵连乘的问题
- 矩阵连乘最优解---动态规划
- 矩阵连乘-动态规划-(只是感觉描述的清晰易懂,并不是什么新算法)
- 动态规划之矩阵连乘最优化问题
- 动态规划 - 矩阵连乘问题(笔记)
- 矩阵连乘--动态规划
- 算法动态规划问题之矩阵连乘
- 动态规划——矩阵连乘(算法设计课题)
- 利用动态规划解决连乘问题
- uva 10003(动态规划起步第四天 矩阵连乘)
- 矩阵连乘的JAVA实现(动态规划)
- 动态规划——矩阵连乘的问题
- 动态规划求解矩阵连乘的最优时间复杂度