B题

题意:给几个串,其中有空符号#,再给新串,问新串能否由这些串按顺序拿出一个字符得到(空符号直接忽略)。

思路:dp。其实这个dp可以由dfs转化而来 写个记忆化搜索也ojbk 可是我dp理解得不好做的时候不知道要存什么状态 其实我写的dfs那两个参数就是状态啊qwq其实是没理解好怎么会有状态被重复搜了啊qwq需要再深刻一点啊

代码:

char a[310];
bool ex[310][30];//这个串是否存在这个字符
char s[10010];
bool dp[310][310];//匹配到第i个串和标准串的第j个字符的状态
int n,m;
int len;
int main()
{
    int q;
    scanf("%d%d%d",&n,&m,&q);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",a);
        for(int j=0;j<m;j++)
        {
            if(a[j]!='#')ex[i][a[j]-'a']=true;
            else ex[i][26]=true;
        }
    }
    while(q--)
    {
        scanf("%s",s+1);
        len=strlen(s+1);
        if(len>n){printf("NO\n");continue;}
        memset(dp,0,sizeof(dp));
        dp[0][0]=true;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=len;j++)
            {
                if(j!=0&&ex[i][s[j]-'a'])dp[i][j]|=dp[i-1][j-1];
                if(ex[i][26])dp[i][j]|=dp[i-1][j];
            }
        }
        if(dp[n][len])printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

CodeForces469D 并查集 Previous
记录 Next