string - Kickstart 2017(apac) 模式重叠

标签 string algorithm dynamic-programming

我在某些测试用例中得到了不正确的输出,其中我的代码失败了。它对大多数输入都正确运行。 这是我的代码 问题链接https://codejam.withgoogle.com/codejam/contest/8284486/dashboard#s=p1

int dp[maxn][maxn];
string a,b;
int dprec(int i,int j)
{
    if(i==a.size()&&j==b.size())return 1;
    if(i==a.size()||j==b.size())return 0;
    if(dp[i][j]!=-1)return dp[i][j];
    int& k=dp[i][j];k=0;
    if(a[i]=='*'||b[j]=='*')
    {
        if(a[i]=='*')
        {
            for(int u=0;u<5;u++)
            {
                k|=dprec(i+1,j+u);
            }
        }
        if(b[j]=='*')
        {
            //k|=dprec(i+1,j);
            for(int u=0;u<5;u++)
            {
                k|=dprec(i+u,j+1);
            }
        }
    }
    else
    {
        if(a[i]==b[j])k|=dprec(i+1,j+1);
        else k=0;
    }
    return k;
}
int main()
{
    freopen("inputt.in","r",stdin);
    freopen("result.out","w",stdout);
    int t;cin>>t;
    for(int test=1;test<=t;test++){
        cin>>a>>b;
        memset(dp,-1,sizeof(dp));
        cout<<"Case #"<<test<<": ";
        if(dprec(0,0))cout<<"TRUE"<<endl;
        else cout<<"FALSE"<<endl;
    }
    return 0;
}

最佳答案

很可能是因为 if(i==a.size()||j==b.size()) 当你的'b'完成并且'a'中只剩下'*'时返回 0;

Ps- 我想对此发表评论,但我的声誉还不够。

关于string - Kickstart 2017(apac) 模式重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42890838/

相关文章:

algorithm - 无法理解最长递增子序列的算法

java - 使用快速查找算法 (Java) 优化有向图中查找所有弱连通分量

arrays - 交换两个元素时更新数组的最大和子间隔

python - 如何使用python从字符串定义函数

c# - 检测重叠周期的算法

c - 指针和 printf

c - Bytelandian 金币解释?

python - 动态规划,最小硬币数量

我可以使用下面的代码还是不正确的?

python - 如何仅替换\n 之后有一些字符