UVA1626BracketsSequence
来源:互联网 发布:广州金针软件电话 编辑:程序博客网 时间:2024/05/22 12:35
//UVA1626BracketsSequence#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAXN = 100 + 10;char s[MAXN];int d[MAXN][MAXN];int len;inline bool Match(int a, int b) {return (a == '(' && b == ')') || (a == '[' && b == ']');}void dp() {for(int i = 0; i < len; i++) {d[i][i] = 1;d[i + 1][i] = 0;}//递推终止条件 for(int i = len - 2; i >= 0; i--) {for(int j = i + 1; j < len; j++) {d[i][j] = len;if(Match(s[i], s[j])) {d[i][j] = min(d[i][j], d[i + 1][j - 1]);}for(int k = i; k < j; k++) {d[i][j] = min(d[i][k] + d[k + 1][j], d[i][j]);}}}}void print(int i, int j) {if(i > j) return ;if(i == j) {if(s[i] == '(' || s[i] == ')') printf("()"); else printf("[]"); return ;}int ans = d[i][j];if(Match(s[i], s[j]) && ans == d[i + 1][j - 1]) {printf("%c", s[i]); print(i + 1, j - 1); printf("%c", s[j]);return ;}for(int k = i; k < j; k++) {if(d[i][k] + d[k + 1][j] == ans) {print(i, k); print(k + 1, j); return ;}}}int main() {int kase;//freopen("UVA1626out.txt", "w", stdout);scanf("%d\n", &kase);for(int i = 0; i < kase; i++) {if(i) printf("\n");fgets(s, sizeof(s), stdin);getchar();len = strlen(s) - 1;//fgets会读入换行符 dp();print(0, len - 1);printf("\n");}return 0;} /*2([(]*/
阅读全文
0 0
- UVA1626BracketsSequence
- Linux USB总线架构
- JAVA 使用Comparator接口实现自定义排序
- geometryEngine中geodesicBuffer()方法分析
- 一个麻将游戏photon服务器主要类列表
- android studio 修改包名
- UVA1626BracketsSequence
- 中文字,文本框,button按钮垂直居中对齐方法
- Exactly-once Semantics are Possible: Here’s How Kafka Does it
- java 高并发解决方案
- jquery 中包含的显示和隐藏功能
- a+b和a-b
- 关于Java抽象类使用总结
- 有理数的相关问题总结
- C++ 编写回调函数步骤