删括号(牛客)


看见这个题我首先想到的是当年我csp就是栽到括号序列上面了
这个题数据很小,考虑dp
实话说这个dp很难想到

先预处理pre数组:与‘)’前面匹配的‘(’的位置 (因为保证序列合法)

#include<bits/stdc++.h>
using namespace std;
char s[105],t[105];
int f[105][105];
stack<int>stk;
int pre[105];
int main()
{
    f[0][0]=1;
    scanf("%s%s",s,t);
    int len1=strlen(s);
    int len2=strlen(t);
    for(int i=0;i<len1;i++)
	if(s[i]=='(')
	stk.push(i);
	else pre[i]=stk.top(),stk.pop();
    for(int i=1;i<=len1;i++)
    {
        for(int j=1;j<=len2;j++)
        {
            if(s[i-1]==t[j-1]) f[i][j]|=f[i-1][j-1];
            if(s[i-1]==')')
                f[i][j]|=f[pre[i-1]][j];
        }
    }
    if(f[len1][len2]) printf("Possible");
    else printf("Impossible");
    return 0;
}
posted @ 2022-01-22 21:16  wzx_believer  阅读(58)  评论(0编辑  收藏  举报