UVA1626BracketsSequence

xiaoxiao2021-02-28  71

//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 ([(] */
转载请注明原文地址: https://www.6miu.com/read-24218.html

最新回复(0)