Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
见鬼了,C++WA, G++AC~代码如下~ #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 110; const int INF = 65536; char str[N]; int f[N][N], act[N][N]; bool finish[N][N]; void Outchar(char c) { switch(c) { case '(': printf(")"); break; case ')': printf("("); break; case '[': printf("]"); break; case ']': printf("["); break; } } bool Yes(char c1, char c2) { if(c1=='(' && c2==')') return true; if(c1=='[' && c2==']') return true; return false; } void Dp(int l, int r) { int i; if(finish[l][r]) return; if(l == r) { f[l][r] = 1; return; } if(l > r) { f[l][r] = 0; return; } f[l][r] = INF; if(Yes(str[l], str[r])) { Dp(l+1, r-1); if(f[l+1][r-1] < f[l][r]) { f[l][r] = f[l+1][r-1]; act[l][r] = 0; } } for(i = l; i < r; i++) { Dp(l, i); Dp(i+1, r); if(f[l][i]+f[i+1][r] < f[l][r]) { f[l][r] = f[l][i]+f[i+1][r]; act[l][r] = i; } } finish[l][r] = true; } void Print(int l, int r) { if(l == r) { switch(str[l]) { case '(': printf("()"); break; case ')': printf("()"); break; case '[': printf("[]"); break; case ']': printf("[]"); break; } return; } if(l > r) return; if(act[l][r] == 0) { printf("%c", str[l]); Print(l+1, r-1); printf("%c", str[r]); } else { Print(l, act[l][r]); Print(act[l][r]+1, r); } } int main() { int len; char s[N]; scanf("%s", s); len = strlen(s); if(len == 0) { printf("\n"); return 0; } for(int i=0; i < len; i++) str[i+1] = s[i]; memset(act, -1, sizeof(act)); memset(finish, false, sizeof(finish)); Dp(1, len); Print(1, len); printf("\n"); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator