矩阵连乘1
2015-10-11 17:24
190 查看
#include "stdio.h" #include "stdlib.h" #include "math.h" #define N 100 int p ; //存储矩阵维数,矩阵Ai的维数为p[i-1]*p[i] int m ; //m[i][j]为最优值,即计算矩阵A[i:j]所需的最少数乘次数 int s ; //确定A[i:j]的最优次序中断开的位置k int MartixChain(int n) //n为矩阵个数 { int i; for(i=1; i<=n; i++) m[i][i] = 0; //单一矩阵,无需计算 int r, k; for(r=2; r<=n; r++) //自底向上依次计算规模为2、3..n的子问题 { for(i=1; i<=n-r+1; i++) //考察n-r+1个规模为r的子问题 { int j = i+r-1; //子问题左端点为i, 右断点为j, 规模为r m[i][j] = m[i][i] + m[i+1][j] + p[i-1]*p[i]*p[j]; //初始最优解 s[i][j] = i; for(k=i+1; k<j; k++) //依次考察不同断点 { int temp = m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; if(temp<m[i][j]) //递推比较 { m[i][j] = temp; //更新最优解 s[i][j] = k; } } } } return m[1] ; } int main() { int n; printf("输入矩阵个数:"); scanf("%d", &n); int i; printf("输入每个矩阵的维数:"); for(i=0; i<=n; i++) { scanf("%d", &p[i]); } int min = MartixChain(n); printf("最少乘次数为:%d\n", min); return 0; }
相关文章推荐
- 求字母的个数
- 为什么Java byte 类型的取值范围是-128~127
- JavaScript基础知识
- java语言:注解
- 第五周
- Python格式化输出
- C#异常处理
- 57 Insert Interval
- 软件测试从业人员 对未来工作有价值的认证证书
- 小议c++内存分配
- 第一天 图像的显示、保存
- 线段树 HDU 1166
- Linux(10.5-10.11)学习笔记
- twisted的一些代码
- Centos 添加SWAP(交换分区)
- laravel routes除了默认路由,其他的都无效 解决方案
- java反射
- 编程珠玑位逻辑运算实现位向量
- 进销存管理系统——可行性分析
- 信息安全系统设计第四周实验报告