【UVA】348-Optimal Array Multiplication Sequence(矩阵链乘)
来源:互联网 发布:南昌房地产交易数据 编辑:程序博客网 时间:2024/05/20 05:26
最基本的矩阵链乘。
一开始打错一个字母WA了N次,郁闷,打印路径的时候找到一条最佳路径不要忘记return。
递推式子为:
dp[i][j] = min(dp[i][k] + dp[k + 1][j] + mat[i].x * mat[k].y * mat[j].y);
348Optimal Array Multiplication SequenceAcceptedC++0.0662014-08-06 10:29:02#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<map>#include<stack>#include<queue>#include<set>#include<ctime>#include<cmath>#include<string>#include<iomanip>#include<climits>#include<cctype>#include<deque>#include<list>#include<sstream>#include<vector>#include<cstdlib>using namespace std;#define _PI acos(-1.0)#define INF (1 << 30)typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> pill;/*======================================矩阵链乘问题,d[i][j]代表i ~ j 编号内矩形相乘最小次数======================================*/#define MAXD 10 + 10int n,Case = 1;int dp[MAXD][MAXD];struct Mat{ int x; int y;}mat[MAXD];void init(){ for(int i = 1 ; i <= n ; i++){ scanf("%d%d",&mat[i].x,&mat[i].y); } for(int i = 1 ; i <= n ; i++) for(int j = i; j <= n ; j++) if(i == j) dp[i][j] = 0; else dp[i][j] = INF; return;}void print(int i,int j){ if(i == j){ printf("A%d",i); return ; } else for(int k = i ; k < j ; k++) if(dp[i][j] == dp[i][k] + dp[k + 1][j] + mat[i].x * mat[j].y * mat[k].y){ printf("(");print(i,k);printf(" x ");print(k + 1, j);printf(")"); return ; } return ;}void DP(){ init(); for(int j = 1 ; j <= n ; j++){ for(int i = 1 ; i + j <= n ; i++){ for(int k = i ; k < i + j ; k++) dp[i][i + j] = min(dp[i][i + j],dp[i][k] + dp[k + 1][i + j] + mat[i].x * mat[i + j].y * mat[k].y); } } printf("Case %d: ",Case++); print(1,n); printf("\n"); return ;}int main(){ while(scanf("%d",&n) && n){ DP(); } return 0;}
0 0
- 【UVA】348-Optimal Array Multiplication Sequence(矩阵链乘)
- UVA 348 Optimal Array Multiplication Sequence(最优矩阵链乘)
- UVA - 348 Optimal Array Multiplication Sequence 最优矩阵连乘
- UVA 348 Optimal Array Multiplication Sequence 最优矩阵链乘 dp经典
- UVa 348 Optimal Array Multiplication Sequence (区间DP&矩阵链乘,MCM)
- UVA 348 Optimal Array Multiplication Sequence 最优矩阵链乘 区间DP
- UVa 348 Optimal Array Multiplication Sequence (DP 最优矩阵链乘)
- UVa 348 Optimal Array Multiplication Sequence (DP 最优矩阵链乘)
- UVA - 348 Optimal Array Multiplication Sequence (最优矩阵连乘)
- UVA 348 & ZOJ1276 Optimal Array Multiplication Sequence(dp , 矩阵链相乘问题)
- uva 348 Optimal Array Multiplication Sequence
- uva:348 - Optimal Array Multiplication Sequence
- uva 348 Optimal Array Multiplication Sequence
- UVA 348 Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- uva 348 - Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- UVa 348 - Optimal Array Multiplication Sequence
- 开源社区太多垃圾程序员,浪费别人的时间是可耻的
- Coco2dx-3.0中如何调用LUA
- 软负载与nginx那些强大的不可不说的功能
- 出现Caused by: java.lang.UnsatisfiedLinkError: Couldn't load game from loader错误
- HDU-4907 Task schedule
- 【UVA】348-Optimal Array Multiplication Sequence(矩阵链乘)
- 删除临时表空ora-25152错误
- 解决LogCat为什么没有显示信息或者一开始有显示但很快就没有了
- CGAffineTransformMakeTranslation和CGAffineTransformTranslate
- NYOJ 503 & HDU 2199 解方程(二分)
- linux学习之定时跑任务
- 11111111111111
- CI模板中php脚本的使用
- Git 版本管理工具(一)