(集合上的动态规划)最有矩阵链乘模板!!!!
来源:互联网 发布:myeclipse可视化编程 编辑:程序博客网 时间:2024/06/06 05:53
//还没想出来怎样输出加了括号后结果??????
#include<iostream>
#include<stdio.h>
using namespace std;
const int N=3;//N为矩阵个数
int p[N+1];//p[i]表示矩阵维数从0到N,
int m[N+1][N+1];//min[i][j]用递推法时记录A[i]*....a[j]的最优计算次数
int s[N+1][N+1];//记录分点位置
int matrixcchain_recursion(int* p,int start,int end)//初始时(p,1,N);
{
int temp;
int min=0xffff;
if(start>=end)
return min=0;
for(int k=start;k<end;k++)//枚举每两个矩阵之间的乘号
{
temp=matrixcchain_recursion(p,start,k)+matrixcchain_recursion(p,k+1,end)+p[start-1]*p[k]*p[end];
if(temp<min)
min=temp;
}
return min;
}
int matrixcchain_nonrecursion(int* p,int start,int end)//初始时(p,1,N);
{
for(int i=start;i<=end;i++)
m[i][i]=0;
//由于长区间的值依赖于短区间的值,故按照j-i递增的顺序递推;
for(int d=2;d<=end;d++)//d表示的是i,j之间的矩阵个数(包括i,j)
{
for(int i=start;i<=end-d+1;i++)
{
int j=i+d-1;
//初始化,即分点为i;(i)(i+1,。。,j)
m[i][j]=m[i][i]+m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
//枚举中间的分点
int temp;
for(int k=i+1;k<j;k++)
{
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;
}
}
}
}
}
//输出加了括号的序列
void trace(int *s,int start,int end)
{
//还没想出来怎样输出加了括号后结果??????
}
int main()
{
for(int i=0;i<=N;i++)
scanf("%d",&p[i]);
//递归的解
printf("%d/n",matrixcchain_recursion(p,1,N));
//非递归求解
matrixcchain_nonrecursion(p,1,N);
printf("%d/n",m[1][N]);
return 0;
}
- (集合上的动态规划)最有矩阵链乘模板!!!!
- 矩阵的链乘 (动态规划)
- 动态规划-矩阵链乘
- 矩阵链乘(动态规划)
- 矩阵链乘 动态规划
- 矩阵链乘 动态规划
- 矩阵连乘的JAVA实现(动态规划)
- 矩阵连乘问题的动态规划算法(java)
- 矩阵连乘的动态规划求解
- 矩阵连乘的动态规划算法
- 矩阵连乘的动态规划解法
- 【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)
- 动态规划 (二) 最优矩阵链乘
- UVA 348 最优矩阵链乘(线性动态规划)
- 动态规划经典问题---矩阵链乘
- 动态规划之矩阵链乘
- 矩阵链乘--动态规划15.2
- 【C++】 动态规划—矩阵链乘
- Integrity Real-time Operating System
- ASP.NET页面局部刷新
- 谈Android中GoogleMap的使用(三)
- 留言板如何分页显示
- mount错误汇总
- (集合上的动态规划)最有矩阵链乘模板!!!!
- poj 2513 并查集+trie,欧拉图
- C#抽象类与接口的区别
- Extjs之Eclipse及spket的开发环境的搭建
- JSP的简介与基本语法
- [Review]OSPF PE-CE Routing
- sgu 107. 987654321 problem
- ADO.NET非连接模式
- 如何得到返回的图片