POJ 1141 / UVa 1626 Brackets Sequence (区间DP&打印路径)
2014-02-28 16:53
453 查看
http://poj.org/problem?id=1141
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=4501
怎么记录路径?
定义divide_pos[i][j]为i到j这一段的最佳添加括号位置,若这一段本身就不需要添加括号,则置-1
完整代码:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=4501
怎么记录路径?
定义divide_pos[i][j]为i到j这一段的最佳添加括号位置,若这一段本身就不需要添加括号,则置-1
完整代码:
/*0ms,416KB*/ #include<cstdio> #include<cstring> const int mx = 100; char s[mx]; int dp[mx][mx];///最小添加个数 int divide_pos[mx][mx];///满足最小添加个数的添加括号的位置 void interval_DP(int len) { int l, i, j, k; for (i = 0; i < len; ++i) dp[i][i] = 1; for (l = 1; l < len; ++l) for (i = 0; i < len - l; i++) { j = i + l; dp[i][j] = mx; if ((s[i] == '(' && s[j] == ')') || (s[i] == '[' && s[j] == ']')) dp[i][j] = dp[i + 1][j - 1], divide_pos[i][j] = -1; for (k = i; k < j; ++k) if (dp[i][k] + dp[k + 1][j] < dp[i][j]) dp[i][j] = dp[i][k] + dp[k + 1][j], divide_pos[i][j] = k; } } void print(int i, int j) { if (i > j) return; if (i == j) { if (s[i] == '(' || s[i] == ')') printf("()"); else printf("[]"); return; } if (divide_pos[i][j] == -1)///说明这段无需添加括号 { putchar(s[i]); print(i + 1, j - 1); putchar(s[j]); return; } print(i, divide_pos[i][j]); print(divide_pos[i][j] + 1, j); } int main() { scanf("%s", s); int len = strlen(s); interval_DP(len); print(0, len - 1); putchar(10); return 0; }
相关文章推荐
- uva1626 poj 1141 Brackets Sequence 区间dp 打印路径
- ★Uva 1626 && POJ 1141 Brackets sequence 详细题解(区间DP+递归打印)
- 区间dp模型之括号匹配打印路径 poj(1141)
- POJ 1141-Brackets Sequence(区间dp括号匹配打印路径)
- poj 1141(区间dp+打印路径)
- POJ 1141 Brackets Sequence(区间DP + 打印路径)
- Brackets sequence UVA - 1626 (典型的区间dp+递归打印路径)
- 区间dp模型之括号匹配打印路径 poj(1141)
- poj 1141 Brackets Sequence(区间DP+路径打印)
- POJ 1141 Brackets Sequence(区间DP, DP打印路径)
- POJ 1141 Brackets Sequence (区间dp 记录路径)
- poj 1141 Brackets Sequence 【区间DP+路径记录】
- poj 1141 Brackets Sequence(区间DP记录路径)
- poj 1141 Brackets Sequence(区间DP,求最小,输出路径,较难)
- UVA 题目10453 Make Palindrome(区间DP,打印路径)
- poj1141 Brackets Sequence(区间dp记录路径问题)
- poj 1141 (区间dp记录路径问题)
- POJ 1141 Brackets Sequence(区间DP记录路径)
- Uva 10559 & POJ 1390 Blocks 区间dp
- UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)