nylgoj15(动态规划问题)

给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。
如:
[]是匹配的
([])[]是匹配的
((]是不匹配的
([)]是不匹配的

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define min(x,y) (x<y?x:y)

#define low(x,y)  ((x=='(')&& y==')' || (x=='[')&& y==']')

char str[110];

int dp[110][110];

int inf=0x0fffffff;

int main()

{

    int fun(int x,int y);

    int time;

    scanf("%d",&time);

    while(time--)

    {

        scanf("%s",str);

        int len=strlen(str);

        memset(dp,-1,sizeof(dp));

        printf("%d\n",fun(0,len-1));

    }

    return 0;

}

int fun(int x,int y)

{

    if(dp[x][y]!=-1)

      return dp[x][y];

    if(x>y) return 0;

    if(x==y) return 1;

    int ans=inf;

    if (low(str[x],str[y]))

        ans=min(ans,fun(x+1,y-1));

    for(int i=x;i<y;i++)

        ans=min(ans,fun(x,i)+fun(i+1,y));

    dp[x][y]=ans;

    return ans;

}

posted @ 2012-05-06 17:04  coodle  阅读(127)  评论(0)    收藏  举报