poj 1141 Brackets Sequence 括号匹配
2012-11-10 16:42
309 查看
题目大意:给你一个字符串由(,),[,]组成,括号之间可以嵌套匹配
比如:
(), [], (()), ([]), ()[], ()[()] 这些是正确的匹配
(, [, ), )(, ([)], ([(] 这些是错误的匹配
要你求最少需要加多少个括号能补齐,输出补齐后的序列
解题思路:动态规划
dp[i][j]表示字符串系列i~j匹配,需要添加的最小括号数
path[i][j]用来保存分割点
dp[i][j] = min(dp[i][k] + dp[k + 1][j]), i<=k < j;
比如:
(), [], (()), ([]), ()[], ()[()] 这些是正确的匹配
(, [, ), )(, ([)], ([(] 这些是错误的匹配
要你求最少需要加多少个括号能补齐,输出补齐后的序列
解题思路:动态规划
dp[i][j]表示字符串系列i~j匹配,需要添加的最小括号数
path[i][j]用来保存分割点
dp[i][j] = min(dp[i][k] + dp[k + 1][j]), i<=k < j;
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; const int maxn = 110; char str[maxn]; int dp[maxn][maxn], path[maxn][maxn], len; void output(int st, int ed); int main() { memset(dp, 0, sizeof(dp)); scanf("%s", str + 1); len = strlen(str + 1); for(int i = 1; i <= len; i++) dp[i][i] = 1; for(int l = 2; l <= len; l++) { for(int i = 1; i <= len - l + 1; i++) { int j = i + l - 1; if(str[i] == '(' && str[j] == ')' || str[i] == '[' && str[j] == ']') { dp[i][j] = dp[i+1][j-1]; path[i][j] = -1; } else dp[i][j] = 0x7fffffff; for(int k = i; k <= j - 1; k++) { if(dp[i][j] > dp[i][k] + dp[k+1][j]) { dp[i][j] = dp[i][k] + dp[k+1][j]; path[i][j] = k; } } } } output(1, len); printf("\n"); return 0; } void output(int st, int ed) { if(st > ed) return; else if(st == ed) { if(str[st] == '(' || str[ed] == ')') printf("()"); else printf("[]"); } else if(path[st][ed] == -1) { printf("%c", str[st]); output(st+1, ed - 1); printf("%c", str[ed]); } else { output(st, path[st][ed]); output(path[st][ed] + 1, ed); } }
相关文章推荐
- POJ 1141-Brackets Sequence(区间dp括号匹配打印路径)
- poj 1141 动态规划进行括号匹配
- 区间dp模型之括号匹配打印路径 poj(1141)
- POJ 1141 Brackets Sequence 括号匹配 区间DP
- POJ 1141 括号匹配加强版
- poj 1141 Brackets Sequence(区间DP->括号匹配的最优生成)
- poj 1141 括号匹配升级版 区间DP
- POJ 1141 括号匹配 DP
- POJ 1141 括号匹配 DP
- 动态规划 :POJ 1141 括号匹配
- poj 1141 Brackets Sequence 完全括号匹配
- poj 1141 Brackets Sequence 括号匹配
- 区间dp模型之括号匹配打印路径 poj(1141)
- POJ 1141 Brackets Sequence (区间dp 括号匹配 经典题)
- POJ 1141 Brackets Sequence 添加括号进行匹配
- POJ 1141 Brackets Sequence 区间DP(括号匹配)
- poj 2955 区间dp(括号匹配)
- poj 1141 DP 括号配对
- POJ 2955-Brackets(括号匹配-区间DP)
- POJ 2955 Brackets (区间DP,括号匹配)