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;
}

浙公网安备 33010602011771号