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 协议 ,转载请注明出处!