矩阵链乘(动态规划)
来源:互联网 发布:vb.net 窗体应用程序 编辑:程序博客网 时间:2024/04/29 10:15
核心语句:ans=min(ans,d[i][k]+d[k+1][j]+m[i]*m[k+1]*m[j+1]); 其中m[i]*m[k+1]*m[j+1]可以类比普通求矩阵的代码#include <stdio.h>#include <string.h> int m[1005]; int d[1005][1005]; int n; int min(int a,int b) { return a<b?a:b; } int dp() { int len,i,j,k; int ans; memset(d,0,sizeof(d)); for (len=1;len<n;len++)//len+1表示一个括号内有几个矩阵(len = 1,代表矩阵链由两个矩阵构成 ) for (i=1,j=i+len;j<n;i++,j++)//i代表起点是第i个矩阵,j代表终点是第j个矩阵 { ans=999999; for (k=i;k<j;k++)//k代表是断点,求从第i个矩阵到第j个矩阵的最小值一定是求第i个矩阵到第k个矩阵的最小值,第k个矩阵最小值到第j个矩阵的最小值,再把这两个矩阵相乘(这是m数组所表示的代价) ans=min(ans,d[i][k]+d[k+1][j]+m[i]*m[k+1]*m[j+1]); d[i][j]=ans; } return d[1][n-1]; } int main() { int i;//从1~n-1个矩阵 while(scanf("%d",&n)==1) { for (i=1;i<=n;i++) scanf("%d",&m[i]);//比如3个矩阵,则n=4,第一个矩阵1行两列,第二个矩阵2行3列,第三个矩阵3行4列,则书写方式为1 2 3 4 printf("%d\n",dp()); } return 0; }
0 0
- 动态规划-矩阵链乘
- 矩阵链乘(动态规划)
- 矩阵链乘 动态规划
- 矩阵链乘 动态规划
- 动态规划经典问题---矩阵链乘
- 动态规划之矩阵链乘
- 矩阵链乘--动态规划15.2
- 【C++】 动态规划—矩阵链乘
- 动态规划之矩阵链乘问题
- 动态规划之矩阵链乘
- 最优矩阵链乘 动态规划
- 矩阵的链乘 (动态规划)
- 动态规划之矩阵链乘
- 矩阵连乘 动态规划
- 矩阵连乘 动态规划
- 矩阵连乘-动态规划
- 动态规划-矩阵连乘
- 动态规划 - 矩阵连乘
- 为什么8位有符号数的范围为“-128 — +127”?
- Linux下Tomcat重新启动
- mysql数据库时间查询相关及mysql数据库向表中某字段前边或者后边追加一段字符串
- Codeforces edu 8 E. Zbazi in Zeydabad 树状数组 处理技巧
- Serializable接口
- 矩阵链乘(动态规划)
- 元宵节后一天日报
- 递归
- Mac不能复制拷贝写入文件到移动硬盘/U盘解决办法
- Swift-函数
- 如何解决Hadoop启动时Datanote启动失败!
- 1023. Have Fun with Numbers (20)
- iOS 获取手机的机型
- form 上传图片