经典的动态规划题

这道题感觉确实有一定难度,感觉自己的dp学的弱爆了!以后还要努力啊!

括号匹配(二)

时间限制:1000 ms  |  内存限制:65535 KB

难度:6

  • 描述

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

    如:
    []是匹配的
    ([])[]是匹配的
    ((]是不匹配的
    ([)]是不匹配的

    • 输入

    • 第一行输入一个正整数N,表示测试数据组数(N<=10)

      每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符,S的长度不超过100

    • 输出

    • 对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组测试输出占一行

    • 样例输入

    • 4[]([])[]((]([)]
    • 样例输出

    • 0032

代码如下:

#include
#include
#define N 105using namespace std;int d[N][N];char a[N];int min(int x,int y){    return x
>test;    while(test--)    {        cin>>a+1;        int i,j,k,p,n;        n=strlen(a+1);        for(i=1;i<=n;i++)  d[i][i-1]=0;        for(i=1;i<=n;i++)  d[i][i]=1;        for(p=1;p<=n-1;p++)        {            for(i=1;i<=n-p;i++)            {                j=i+p;                d[i][j]=1000;                if((a[i]=='('&&a[j]==')')||(a[i]=='['&&a[j]==']'))                    d[i][j]=min(d[i][j],d[i+1][j-1]);                for(k=i;k
<
<