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<<')';
}
矩阵连乘(动态规划)
最新推荐文章于 2023-04-06 19:53:38 发布