双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

矩阵连乘问题

lq651659889 lq651659889 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include<iostream>
#include<iomanip>
using namespace std;

void MatrixChain(int *p,int n,int **m,int **s)
{
for(int ia=1;ia<=n;ia++)
m[ia][ia] = 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 ib,int j,int **s)
{
if(ib==j)
return;
Traceback(ib,s[ib][j],s);
Traceback(s[ib][j]+1,j,s);
cout<<"Multiply A"<<ib<<","<<s[ib][j];
cout<<"and A"<<(s[ib][j]+1)<<","<<j<<endl;
}

void main(void)
{
cout<<"输入你要的矩阵个数n"<<endl;
int n;
cin>>n;
int *p;//保存你要的矩阵行列
p=new int[n+1];
for(int ic=0;ic<=n;ic++)
{
char ca;
cin>>ca;
if(ca != 0)
p[ic]=static_cast <int>(ca);
else
break;
}
int **s,**m;
s=new int *[n+1];
m=new int *[n+1];
for(int a=0;a<=n;a++)
{
s[a]=new int [n+1];
m[a]=new int [n+1];
}
MatrixChain(p,n,m,s);
for(int ic=1;ic<=n;ic++)
{
for(int id=ic+1;id<=n;id++)
{
cout<<m[ic][id]<<setw(8);
}
cout<<endl;
}
cout<<m[1][n]<<endl;
//Traceback(1,n,s);
delete []p;
for(int b=0;b<=n;b++)
{
delete []s[b];
delete []m[b];
}
delete []s;
delete []m;
}
...全文

相关推荐

矩阵连乘_矩阵连乘问题_

实现计算多个矩阵连乘的最终结果并且对时间复杂度进行了优化

慕酒

矩阵连乘问题(算法 代码)

小算法一个,自己感觉当时学的时候挺不错的,就保留了,发布到网上,需要的顶一下,谢谢了

rftgcq7860062

Java实现矩阵连乘问题

用动态规划思想解决矩阵连乘的问题。………………………………

WsHunTer

矩阵连乘的重叠子问题

Description 在讲动态规划课时,我们知道可用动态规划算法求解的问题应具备的一个基本要素是子问题的重叠性质,矩阵连乘问题能用动态规划求解正是因为它具有重叠子问题。因此在解矩阵连乘问题的自顶向下的递归算法中,存在着大量的重叠子问题计算。例如要计算4个矩阵A1A2A3A4最小连乘次数,要分别计算A1(A2A3A4)、(A1A2)(A3A4)和(A1A2A3)A4三种情况下的最小连乘次数,而计算A1(A2A3A4)的最小连乘次数要计算其子问题A2A3A4的最小连乘次数,A2A3A4最小连乘次数的计算有二种情况(A2A3)A4和A2(A3A4),它分别包括求A2A3和A3A4两个子问题。同理,计算(A1A2)(A3A4)包含A1A2和A3A4两个子问题;计算(A1A2A3)A4包含计算A1A2A3、A1A2和A2A3这三个子问题。故在解A1A2A3A4的最小连乘次数时,其子问题的计算和重叠次数分别是: A1A2计算2次,重叠1次;A2A3计算2次,重叠1次;A3A4计算2次,重叠1次;A1A2A3只计算1次;A2A3A4只计算1次;A1A2A3A4只计算1次。因此,4个矩阵A1A2A3A4连乘的重叠子问题分别为:A1A2、A2A3和A3A4的计算各重叠一次。现在你的编程任务是:对于n个矩阵连乘,求其重叠子问题的计算次数。 Input 第一行是1个整数n(2≤n≤300),表示有n个矩阵连乘,接下来一行有n+1个数,表示是n个矩阵的行及第n个矩阵的列,它们之间用空格隔开. Output 输出重叠子问题计算次数和对应的子问题,中间以空格隔开,各子问题的重叠次数输出分别以A1、A2、… An打头的次序依次输出,格式如样例所示。如没有重叠子问题输出NO Sample Input 4 30 35 15 5 10 Sample Output 1 A1A2 1 A2A3 1 A3A4

红尘若梦~

c++实现矩阵连乘问题

c++实现矩阵连乘问题,通过动态规划法的思想求得。

pursue1222
评论 11
收藏 已收藏
分享
返回顶部
lq651659889
C++ 语言 65,214 成员 250,514 内容