竞赛讨论区 > AC代码,但是不懂 那个if里面要加!k 是为什么
头像
张松超、
编辑于 2019-04-15 23:38
+ 关注

AC代码,但是不懂 那个if里面要加!k 是为什么

dp[i][j][k]表示a到前i个,b到前j个,还可以再删除k个右括号的情况是否有可能


#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
char a[MAXN], b[MAXN];
int dp[MAXN][MAXN][MAXN];
int main()
{
    scanf("%s%s", a + 1, b + 1);
    int lena = strlen(a + 1), lenb = strlen(b + 1);
    dp[0][0][0] = 1;
    for (int i = 1; i <= lena; i++)
    {
        for (int j = 0; j <= lenb; j++)
        {
            for (int k = 0; k <= lena; k++)
            {
                if (!k && a[i] == b[j]) dp[i][j][k] |= dp[i - 1][j - 1][k];
                if (a[i] == '(' && k > 0) dp[i][j][k] |= dp[i - 1][j][k - 1];
                if (a[i] == ')') dp[i][j][k] |= dp[i - 1][j][k + 1];
            }
        }
    }
    if (dp[lena][lenb][0]) printf("Possible");
    else printf("Impossible");
    return 0;
}
/*
((())((())())())
(()(())())
*/


全部评论

(4) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐