动态规划之矩阵链乘法
来源:互联网 发布:查潮汐软件下载 编辑:程序博客网 时间:2024/06/09 17:14
#include <iostream> #include <stdio.h>#include <assert.h>#include <stdlib.h>#include <String.h>#define MAX 100typedef struct Matrix{ int left; int right;}Matrix;using namespace std;//自底向上的矩阵链乘法 void MATRIX_CHAIN_ORDER(Matrix a[], int num){ //创建存储最优子问题解的数组 int m[MAX][MAX], s[MAX][MAX]; //数组初始化 memset(m, MAX*MAX, sizeof(int)); memset(s, MAX*MAX, sizeof(int)); for(int i=0; i<num; i++) m[i][i] = 0; for(int l=2; l<=num; l++){ for(int i=0; i<num-1; i++){ //依次计算计算链长为l的最小矩阵乘积 int j = i+l-1; m[i][j] = 2e31; for(int k=i; k<=j-1; k++){ int i_j_sum = m[i][k]+m[k+1][j]+a[i].left*a[k].right*a[j].right; if(i_j_sum<m[i][j]){ m[i][j] = i_j_sum; s[i][j] = k; } } } for(int i=0; i<num; i++){ for(int j=0; j<num; j++){ cout <<m[i][j]<<" "; } cout<<endl; } } cout<<m[0][num-1]; return;}int LOOKUP_CHAIN(int m[][MAX], Matrix a[], int i, int j){ if(i == j){ m[i][j]=0; } for(int k=i; k<j; k++){ int q = LOOKUP_CHAIN(m, a, i, k)+LOOKUP_CHAIN(m, a, k+1, j) + a[i].left*a[k].right*a[j].right; if(q<m[i][j]){ m[i][j] = q; } } return m[i][j];} //自顶向下的矩阵链乘法 void MEMOIZED_MATRIX_CHAIN(Matrix a[], int num){ //创建存储最优子问题解的数组 int m[MAX][MAX], s[MAX][MAX]; //数组初始化 memset(m, MAX*MAX, sizeof(int)); memset(s, MAX*MAX, sizeof(int)); for(int i=0; i<num; i++){ for(int j=i; j<num; j++){ m[i][j] = 2e31; } } //递归计算 LOOKUP_CHAIN(m, a, 0, num-1); cout<<m[0][num-1]; return;}int main(){ Matrix a[MAX]; int num = -1; while(cin>>num){ //输入矩阵参数 for(int i=0; i<num; i++) cin>>a[i].left>>a[i].right; // MATRIX_CHAIN_ORDER(a, num); MEMOIZED_MATRIX_CHAIN(a, num); } return 0; }
0 0
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之 矩阵链乘法
- 动态规划算法之矩阵链乘法
- 动态规划之矩阵链乘法
- 说说动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法理解
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划之矩阵链乘法
- 动态规划 矩阵链乘法
- 动态规划 矩阵链乘法
- 动态规划----矩阵链乘法
- 动态规划 -- 矩阵链乘法
- 动态规划-矩阵链乘法
- 【动态规划】矩阵链乘法
- HDU 2069 JAVA
- leetcode_middle_63_116. Populating Next Right Pointers in Each Node
- sendRedirect()重定向和forward()转发的比较
- 浅谈Eclipse dropins插件安装的"坑"
- 【开源.NET】轻量级内容管理框架Grissom.CMS(第三篇解析配置文件和数据以转换成 sql)
- 动态规划之矩阵链乘法
- Ehcache整合spring配置
- BIT2013年上机第二题
- android五大基本存储方式
- BZOJ 2330: [SCOI2011]糖果
- POJ 3764 The xor-longest Path (Trie树 + dfs)
- 客户端的跳转与服务器端的跳转的区别
- C++之“this指针”
- HDU 2070 JAVA