PKU 1140 - Brackets Sequence (区间dp + 记忆化)
来源:互联网 发布:如何评价阿凡达 知乎 编辑:程序博客网 时间:2024/05/20 02:23
题意
输出最少长度匹配括号
思路
区间dp,其他博客说得很详细了。主要是看没人写记忆化的区间dp,就来一发。
代码
#include <stack>#include <cstdio>#include <list>#include <cassert>#include <set>#include <iostream>#include <string>#include <vector>#include <queue>#include <functional>#include <cstring>#include <algorithm>#include <cctype>#pragma comment(linker, "/STACK:102400000,102400000")#include <string>#include <map>#include <cmath>//#include <ext/pb_ds/assoc_container.hpp>//#include <ext/pb_ds/hash_policy.hpp>using namespace std;//using namespace __gnu_pbds;#define LL long long#define ULL unsigned long long#define SZ(x) (int)x.size()#define lowbit(x) ((x) & (-x))#define MP(a, b) make_pair(a, b)#define MS(p, num) memset(p, num, sizeof(p))#define PB push_back#define X first#define Y second#define ROP freopen("input.txt", "r", stdin);#define MID(a, b) (a + ((b - a) >> 1))#define LC rt << 1, l, mid#define RC rt << 1|1, mid+1, r#define LRT rt << 1#define RRT rt << 1|1#define FOR(i, a, b) for (int i=(a); (i) < (b); (i)++)#define FOOR(i, a, b) for (int i = (a); (i)<=(b); (i)++)const double PI = acos(-1.0);const int INF = 0x3f3f3f3f;const double eps = 1e-8;const int MAXN = 1e4+10;const int MOD = 1e9+7;const int dir[][2] = { {1, 0}, {0, -1}, {-1, 0}, {0, 1} };const int seed = 131;int cases = 0;typedef pair<int, int> pii;char str[1000];int mov[110][110], dp[110][110];bool match(int l, int r){ if (str[l] == '(' && str[r] == ')') return true; if (str[l] == '[' && str[r] == ']') return true; return false;}int dfs(int l, int r){ if (l > r) return 0; if (l == r) return 1; if (dp[l][r] != -1) return dp[l][r]; int res = INF; if(match(l, r)) res = dfs(l+1, r-1); for (int k = l; k < r; k++) { if (dfs(l, k) + dfs(k+1, r) < res) { res = dfs(l, k) + dfs(k+1, r); mov[l][r] = k; } } return dp[l][r] = res;}char inv(char c){ if (c == '(') return ')'; if (c == ')') return '('; if (c == '[') return ']'; if (c == ']') return '[';}void print_ans(int l, int r){ if (l > r) return; if (l == r) { if (str[l] == '(' || str[l] == ')') printf("()"); else printf("[]"); return; } if (mov[l][r] == -1) { printf("%c", str[l]); print_ans(l+1, r-1); printf("%c", str[r]); } else { print_ans(l, mov[l][r]); print_ans(mov[l][r]+1, r); }}int main(){ //ROP; while (gets(str)) { MS(dp, -1); MS(mov, -1); int len = strlen(str); dfs(0, len-1); print_ans(0, len-1); puts(""); } return 0;}
0 0
- PKU 1140 - Brackets Sequence (区间dp + 记忆化)
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
- pku 1141 Brackets Sequence(DP)
- poj1141 Brackets Sequence 区间dp
- ZOJ1463:Brackets Sequence(区间DP)
- POJ1141 Brackets Sequence 区间DP
- pku1141 Brackets Sequence 区间DP
- poj1141 Brackets Sequence--区间dp
- Brackets Sequence (区间dp)
- pku 2955 Brackets(区间dp)
- 149D - Coloring Brackets(区间DP 记忆化搜索)
- POJ 2955 Brackets(区间DP, 记忆化搜索)
- poj 2955 Brackets (区间dp)||(记忆话搜素)
- POJ 1141 Brackets Sequence(区间DP)
- poj 1141Brackets Sequence[区间dp]
- POJ 1141 Brackets Sequence ( 区间DP )
- POJ 1141 - Brackets Sequence 区间DP
- POJ-1141 Brackets Sequence 经典区间DP
- 项目中使用的spring 注解说明
- JavaScript权威指南_165_第17章_事件处理_17.2-注册事件处理程序-attachEvent()
- 解决Spring注解无法注入静态变量的问题
- 扁平化按钮
- 黑马程序员——File类及其常见操作
- PKU 1140 - Brackets Sequence (区间dp + 记忆化)
- IDF实验室之简单的PE文件逆向
- Ember.js 入门指南——属性传递
- 快速排序算法简述
- Resources in Visual Tracking
- Python微博地点签到大数据实战(一)微博API的使用
- dsaf
- Android学习实践:9.多选框CheckBox
- jQuery CSS 操作 - offsetParent() 方法