入门经典 DP 矩阵相乘
2013-06-08 18:24
204 查看
/* 矩阵相乘 */ #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm> using namespace std; const int MAXN = 10; const int INF = 1<<30; int n; int m[MAXN]; int d[MAXN][MAXN]; int s[MAXN][MAXN]; void dp() { for(int i=1; i<=n; i++) { d[i][i] = 0; } for(int l=2; l<=n; l++) { for(int i=1; i<=n-l+1; i++) { int j = i+l-1; d[i][j] = INF; int sum; for(int k=i; k<j; k++) { sum = d[i][k] + d[k+1][j] + m[i-1]*m[k]*m[j]; if(sum < d[i][j]) { d[i][j] = sum; s[i][j] = k; } } } } } void print(int i, int j) { if(i==j) { printf("A%d", i); } else { int k = s[i][j]; printf("("); print(i, k); print(k+1, j); printf(")"); } } int main(){ #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); #endif scanf("%d", &n); for(int i=0; i<=n; i++) { scanf("%d", &m[i]); } dp(); printf("%d\n", d[1] ); print(1, n); return 0; }
相关文章推荐
- poj 1651 Multiplication Puzzle(区间DP,直接用矩阵相乘的方式也对)
- 经典矩阵dp寻找递增最大长度
- UVA 674 Coin Change 换硬币 经典dp入门题
- 入门经典 DP 0-1背包问题
- HDU2089 不要62(数位DP入门经典题目)
- 区间DP 矩阵相乘复杂度计算
- Conquer-Divide的经典例子之Strassen算法解决大型矩阵的相乘
- UVA 674 Coin Change 换硬币 经典dp入门题
- 蓝桥杯 算法提高 矩阵乘法 【经典区间dp】
- HDU2089 不要62(数位DP入门经典题目)
- 动态规划经典问题——求矩阵相乘的最佳顺序
- 关于矩阵乘法优化dp(入门+斐波那契模板题)
- HDU 数塔 (dp入门经典)
- 0-1背包问题入门小结 动态规划(DP)经典题目 POJ324 POJ1276
- 动态规划入门(二)DP 基本思想 具体实现 经典题目 POJ1088 POJ1163 POJ1050
- 动态规划入门(三)DP 基本思想 具体实现 经典题目 POJ1159 POJ1458 POJ1141
- 0-1背包问题入门小结 动态规划(DP)经典题目 POJ324 POJ1276
- 矩阵相乘入门,两个矩阵相乘
- hduoj1003(经典dp入门)
- NYOJ 题目298 点的变换(数学,矩阵相乘,模板经典)