区间DP-矩阵连乘问题
来源:互联网 发布:PHP程序员怎么样 编辑:程序博客网 时间:2024/05/10 19:42
#include <iostream>#include <sstream>#include <stdio.h>#include <algorithm>#include <string.h>#include <stack>#include <queue>#include <set>#include <math.h>/*=======================================矩阵连乘问题dp(i, j) = min( dp(i, k) + dp(k + 1, j) + S);i < k < j;dp(i, i) = 0;========================================*/#define flush(arr, i) memset(arr, i, sizeof(arr))typedef long long int64;using namespace std;const int MAX_ITEM = 128;//const int oo = 0x7fffffff;const int oo = 0x3f3f3f3f;int dp[MAX_ITEM][MAX_ITEM];int w[MAX_ITEM], pos[MAX_ITEM][MAX_ITEM];int DP(int l, int r){ if(l == r) return 0; if(dp[l][r]) return dp[l][r]; int ans = oo, tmp = 0; for(int i = l; i < r; i++) { tmp = DP(l, i) + DP(i + 1, r) + w[l - 1] * w[i] * w[r]; if(ans > tmp) { ans = tmp; pos[l][r] = i; } } return dp[l][r] = ans;}void display(int l, int r){ if(l == r) { printf("A%d", l); return; } printf("("); display(l, pos[l][r]); display(pos[l][r] + 1, r); printf(")");}int main(){ freopen("0-data.txt", "r", stdin); int n; while(scanf("%d", &n) != EOF) { flush(dp, 0); flush(pos, 0); for(int i = 0; i <= n; i++) scanf("%d", w + i); printf("%d\n", DP(1, n)); display(1, n); } return 0;}
0 0
- 区间DP-矩阵连乘问题
- DP 矩阵连乘问题
- 矩阵连乘问题 DP
- DP---矩阵连乘问题
- 矩阵连乘问题 DP
- dp:矩阵连乘问题
- Multiplication Puzzle(区间DP:类似矩阵连乘问题的DP模板)
- poj 1651 区间dp+矩阵连乘DP
- 基于DP的矩阵连乘问题
- 矩阵连乘问题(dp)
- DP---矩阵连乘
- DP+矩阵连乘
- DP--矩阵连乘
- 矩阵连乘 DP
- dp矩阵连乘
- 矩阵连乘DP
- 区间DP问题(矩阵连乘,石子合并,括号匹配)
- POJ-1651 Multiplication Puzzle 矩阵连乘问题(区间dp)
- 【黑马程序员】C语言指针总结
- qschedule manager
- mac OS X El Capitan xcrun: error: invalid active developer path missing xcrun at
- ios程序开发中用到的加密方式
- qschedule server
- 区间DP-矩阵连乘问题
- UITextField
- 提交表单不转义url中的中文
- 浮动兼容问题
- c#webAPI几点注意
- Advanced .vimrc config
- 【bzoj4296】 PA2015Mistrzostwa 图论
- 【BZOJ4300】绝世好题
- Flo's Restaurant