用动态规划求矩阵链相乘的最小乘法次数

【实验名称】
矩阵链相乘问题
【实验内容与要求】
用动态规划策略求矩阵链相乘的最小乘法次数及乘法方式
【实验类型】
验证型

【实验思路】
建立一个n*n的表,先将对角线d0填充0,然后利用公式
C[i][j]=min{C[i][j],(C[i][k-1]+C[k][j]+M[i][0]*M[k][0]*M[j][1])}
依次填充d1到dn-1,并记录下对应的k值,最后输出C[1,n]的结果。
【实验代码】
#include
using namespace std;
int main()
{
int n;
cin>>n;
int M[n+1][2];
for(int i=1;i<=n;i++)
{
cin>>M[i][0]>>M[i][1];
}
int C[n+1][n+1],K[n+1][n+1];
for(int i=1;i<=n;i++)
{
C[i][i]=0;
}
for(int d=1;d<n;d++)
{
for(int i=1;i<=n-d;i++)
{
int j=i+d;
C[i][j]=99999999;
for(int k=i+1;k<=j;k++)
{
C[i][j]=C[i][j]<(C[i][k-1]+C[k][j]+M[i][0]*M[k][0]*M[j][1])?C[i][j]:(C[i][k-1]+C[k][j]+M[i][0]*M[k][0]*M[j][1]);
K[i][j]=C[i][j]<(C[i][k-1]+C[k][j]+M[i][0]*M[k][0]*M[j][1])?k-1:k;
}
}
}
cout<<“最小乘法次数:”<<C[1][n]<<endl;
cout<<“此时k=”<<K[1][n]<<endl;
return 0;
}

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值