矩阵连乘(动态规划)
2018-10-14 17:08
351 查看
题目描述:
递归方式:
[code]//递归方法 #include<iostream> #include<cstdio> using namespace std; int p[100],s[100][100]; int DirectMatrixChain(int i,int j)//递归的求最优解u { if(i==j) return 0; int u=DirectMatrixChain(i,i)+DirectMatrixChain(i+1,j)+p[i-1]*p[i]*p[j]; s[i][j]=i; for(int k=i+1;k<j;k++) { int t=DirectMatrixChain(i,k)+DirectMatrixChain(k+1,j)+p[i-1]*p[k]*p[j]; if(t<u) { u=t; s[i][j]=k; } } return u; } void traceback(int i,int j)//递归输出矩阵连乘次序 { if(i==j) cout<<"A"<<i; else if (i==j-1) cout<<"(A"<<i<<"A"<<j<<")"; else { cout<<"("; traceback(i,s[i][j]); traceback(s[i][j]+1,j); cout<<")"; } } int main() { int n; cin>>n; for(int i=0;i<=n;i++) cin>>p[i]; cout<<DirectMatrixChain(1,n)<<endl; traceback(1,n); cout<<endl; return 0; }
[code]//递推方法 #include<iostream> #include<cstdio> using namespace std; int p[1000],m[1000][1000],s[1000][1000]; void MatrixChain(int n)//递推求最优解 { for (int i = 1; i <= n; i++) m[i][i] = 0; for (int r = 2; r <= n; r++) for (int 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)//递归输出矩阵连乘次序 { if(i==j) cout<<"A"<<i; else if (i==j-1) cout<<"(A"<<i<<"A"<<j<<")"; else { cout<<"("; traceback(i,s[i][j]); traceback(s[i][j]+1,j); cout<<")"; } } int main() { int n; cin>>n; for(int i=0;i<=n;i++) { cin>>p[i]; } MatrixChain(n); traceback(1,n); cout<<endl; return 0; }
阅读更多
相关文章推荐
- 动态规划之矩阵连乘问题
- 矩阵连乘最优解---动态规划
- 动态规划——矩阵连乘的问题
- 矩阵连乘--动态规划
- 夕拾算法进阶篇:28)矩阵连乘(动态规划DP)
- 动态规划——矩阵连乘的问题
- 矩阵连乘 动态规划(转载)
- [动态规划]矩阵连乘
- 第3章 动态规划 矩阵连乘问题
- 动态规划--矩阵连乘问题
- 动态规划求解矩阵连乘问题Java实现
- 动态规划 矩阵连乘问题
- soj 11600 Pick It 矩阵连乘模型 动态规划 acdream 1208 qj的奇怪宝具 noip 2006 energy 能量项链
- 动态规划——矩阵连乘的问题
- 0010算法笔记——【动态规划】矩阵连乘问题
- 动态规划——POJ1651(矩阵连乘)
- 动态规划——矩阵连乘的问题
- C语言矩阵连乘 (动态规划)详解
- 动态规划--(矩阵连乘 类似poj1651 )
- 动态规划-矩阵连乘