| ||||||||||
| 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 | |||||||||
Re:为什么错了,求指点。。。。附代码In Reply To:为什么错了,求指点。。。。附代码 Posted by:tiler at 2011-07-21 20:49:06 > #include <cstdio>
> #include <string>
> #include <iostream>
> #define INF 1e9
> using namespace std;
> struct node
> {
> int x,y;
> };
> int dp[105][105];
> node path[105][105];
> string s;
> void print(int a,int b)
> {
> if (a > b)
> return;
> if (a == b)
> {
> if (s[a] == '(' || s[a] == ')')
> printf("()");
> else
> printf("[]");
> return;
> }
> if (path[a][b].x == 1 && path[a][b].y == -1)
> {
> putchar(s[a]);
> print(a + 1,b - 1);
> putchar(s[b]);
> return;
> }
> if (path[a][b].x == a + 1)
> {
> if (s[a] == '(' || s[a] == ')')
> printf("()");
> else
> printf("[]");
> print(a + 1,b);
> return;
> }
> if (path[a][b].x == b)
> {
> print(a,b - 1);
> if (s[b] == '(' || s[b] == ')')
> printf("()");
> else
> printf("[]");
> return;
> }
> if (path[a][b].x < 0)
> {
> int r = -path[a][b].x;
> print(a,r - 1);
> print(r,b);
> }
> return;
> }
> int main()
> {
> int i,j,k,i1;
> char s1[105];
> while (gets(s1))
> {
> if (strlen(s1) == 0)
> {
> printf("\n");
> continue;
> }
> s = s1;
> memset(dp,0,sizeof(dp));
> memset(path,0,sizeof(path));
> k = s.length();
> for (j = 0;j < k;j++)
> {
> for (i = 0;i < k;i++)
> {
> if (i + j >= k)
> break;
> dp[i][i + j] = INF;
> if (j == 0)
> {
> dp[i][i] = 2;
> continue;
> }
> if (s[i] == ')' || s[i] == ']')
> {
> dp[i][i + j] = dp[i][i] + dp[i + 1][i + j];
> path[i][i + j].x = i + 1;
> continue;
> }
> if (s[i + j] == '(' || s[i + j] == '[')
> {
> dp[i][j] = dp[i][i + j - 1] + dp[i + j][i + j];
> path[i][i + j].x = i + j;
> continue;
> }
> if (s[i] == '(' && s[i + j] == ')' && dp[i + 1][i + j - 1] + 2 < dp[i][i + j])
> {
> dp[i][i + j] = dp[i + 1][i + j - 1] + 2;
> path[i][i + j].x = 1,path[i][i + j].y = -1;
> }
> else if (s[i] == '[' && s[i + j] == ']' && dp[i + 1][i + j - 1] + 2 < dp[i][i + j])
> {
> dp[i][i + j] = dp[i + 1][i + j - 1] + 2;
> path[i][i + j].x = 1,path[i][i + j].y = -1;
> }
> for (i1 = i + 1;i1 < i + j;i1++)
> {
> if (((s[i] == '(' && s[i1] == ')') || (s[i] == '[' && s[i1] == ']') )&& dp[i][i1] + dp[i1 + 1][i + j] < dp[i][i + j])
> {
> dp[i][i + j] = dp[i][i1] + dp[i1 + 1][i + j];
> path[i][i + j].x = -(i1 + 1);
> }
> if (((s[i1] == '(' && s[i + j] == ')') || (s[i1] == '[' && s[i + j] == ']') )&& dp[i][i1 - 1] + dp[i1][i + j] < dp[i][i + j])
> {
> dp[i][i + j] = dp[i][i1 - 1] + dp[i1][i + j];
> path[i][i + j].x = -i1;
> }
> }
> if (dp[i][i] + dp[i + 1][i + j] < dp[i][i + j])
> {
> dp[i][i + j] = dp[i][i] + dp[i + 1][i + j];
> path[i][i + j].x = i + 1;
> }
> }
> }
> print(0,k - 1);
> 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