LOJ #10150. 「一本通 5.1 练习 1」括号配对

题目:括号配对

思路:
最开始以为[]()分开处理就好了,但是[(])这样的数据过不去。
我们可以计算出这段序列有多少已经配好对的括号,[(])只计算[]()中的一个,而[((]))只计算(())
然后剩下来的每个字符都需要一个相应的字符与之对应。

代码:

#include
using namespace std;

#define maxn 100

char a[maxn+5];
int n;
int f[maxn+5][maxn+5];

int main() {
    scanf("%s",a);
    n=strlen(a);
    for(int i=n-1;i>=0;i--) {
        for(int j=i+1;jif((a[i]=='('&&a[j]==')')||(a[i]=='['&&a[j]==']')) f[i][j]=2+f[i+1][j-1];
            for(int k=i;k1][j]);
        }
    }
    printf("%d",n-f[0][n-1]);
    return 0;
}

你可能感兴趣的:(动态规划)