很难 至少是我这个水平来看 贴一篇题解 https://blog.csdn.net/weixin_52829980/article/details/115037993 我只能勉强理解 第三层嵌套循环可以理解为枚举删除k个左括号的情况。
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[105],t[105];
scanf("%s%s",s+1,t+1);
int len1=strlen(s+1);
int len2=strlen(t+1);
bool dp[105][105][55];
memset(dp,0,sizeof(dp));
dp[0][0][0]=true;
for(int i =0;i<=len1;i++){
for(int j =0;j<=len2;j++){
for(int k =0;k<len1/2;k++){
if(dp[i][j][k])
{
if(k==0&&s[i+1]==t[j+1]) dp[i+1][j+1][0]=true;
if(s[i+1]=='(') dp[i+1][j][k+1]=true;
else if(k) dp[i+1][j][k-1]=true;
}
}
}
}
if(dp[len1][len2][0]) cout << "Possible"<<endl;
else cout << "Impossible\n";
return 0;
}