矩阵连乘(动态规划)

来源:互联网 发布:淘宝访问受限怎么解决 编辑:程序博客网 时间:2024/05/24 07:05
int n;int ans[100][100],a[100],s[100][100];void dfs(int l,int r);int main(){    while(cin>>n)    {        memset(ans,0,sizeof(ans));        for(int i=0;i<=n;i++)cin>>a[i];        for(int i=1;i<n;i++)            for(int j=1;j+i<=n;j++)            {                ans[j][i+j]=ans[j+1][i+j]+a[j-1]*a[j]*a[i+j];                s[j][i+j]=j;                for(int k=j+1;k<i+j;k++)                    if(ans[j][i+j]>ans[j][k]+ans[k+1][i+j]+a[j-1]*a[k]*a[i+j])                    {                        ans[j][i+j]=ans[j][k]+ans[k+1][i+j]+a[j-1]*a[k]*a[i+j];                        s[j][i+j]=k;                    }            }        cout<<"最小次数为:"<<ans[1][n]<<endl;        cout<<"完全加括号方式为:";        dfs(1,n);        cout<<endl;    }}void dfs(int l,int r){    if(l==r)    {        cout<<l;        return ;    }    cout<<'(';    dfs(l,s[l][r]);    cout<<',';    dfs(s[l][r]+1,r);    cout<<')';}

原创粉丝点击