看见这个题我首先想到的是当年我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;
}