待修改
#include <iostream> using namespace std; void MatrixChain(int *p,int n,int m[][10],int s[][10]) { for(int i=1;i<=n;i++) { m[i][i]=0; s[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; } } } } int main() { int n; cin>>n; int *p=new int[n+1]; int m[10][10],s[10][10]; for(int i=0;i<=n;i++) cin>>p[i]; MatrixChain(p,n,m,s); cout<<"运算次数矩阵:"<<endl; for(int i=1;i<=n;i++) { for(int k=1;k<i;k++) cout<<" "; for(int j=i;j<=n;j++) cout<<m[i][j]<<" "; cout<<endl; } cout<<"分割点矩阵:"<<endl; for(int i=1;i<=n;i++) { for(int k=1;k<i;k++) cout<<" "; for(int j=i;j<=n;j++) cout<<s[i][j]<<" "; cout<<endl; } return 0; }