bzoj千题计划205:bzoj1966: [Ahoi2005]VIRUS 病毒检测
2018-01-08 09:32
330 查看
http://www.lydsy.com/JudgeOnline/problem.php?id=1966
f[i][j] 表示s的前i个和t的前j个是否匹配
转移看代码
注意初始化:
f[0][0]=true
f[i][0]=true s[1,i]='*'
如果没有第二个,反例:
***A
A
f[4][1]=f[3][0]
f[i][j] 表示s的前i个和t的前j个是否匹配
转移看代码
注意初始化:
f[0][0]=true
f[i][0]=true s[1,i]='*'
如果没有第二个,反例:
***A
A
f[4][1]=f[3][0]
#include<cstdio> #include<cstring> using namespace std; #define N 1001 #define M 501 char s ,t[M]; int ls,lt; int ans; bool f [M]; void solve() { memset(f,false,sizeof(f)); f[0][0]=true; for(int i=1;i<=ls;++i) if(s[i]=='*') f[i][0]=true; else break; for(int i=1;i<=ls;++i) for(int j=1;j<=lt;++j) if(s[i]==t[j]) f[i][j]=f[i-1][j-1]; else { if(s[i]=='?') f[i][j]=f[i-1][j-1]; else if(s[i]=='*') f[i][j]=f[i][j-1]|f[i-1][j-1]|f[i-1][j]; } if(f[ls][lt]) ans++; } int main() { scanf("%s",s+1); ls=strlen(s+1); int n; scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%s",t+1); lt=strlen(t+1); solve(); printf("%d",f[ls][lt] ? 1 : 0); } printf("%d",n-ans); }
相关文章推荐
- bzoj 1966: [Ahoi2005]VIRUS 病毒检测
- BZOJ1966 [Ahoi2005]VIRUS 病毒检测
- 【bzoj 1966】: [Ahoi2005]VIRUS 病毒检测
- [bzoj1966][Ahoi2005][VIRUS 病毒检测] (字符串dp)
- bzoj1966: [Ahoi2005]VIRUS 病毒检测
- [BZOJ]1966: [Ahoi2005]VIRUS 病毒检测 DP
- bzoj 1966: [Ahoi2005]VIRUS 病毒检测
- BZOJ P1966[Ahoi2005]VIRUS 病毒检测
- 1966: [Ahoi2005]VIRUS 病毒检测
- bzoj1966 [AHOI2005]病毒检测 结论+暴力
- 1966: [Ahoi2005]VIRUS 病毒检测
- bzoj千题计划170:bzoj1968: [Ahoi2005]COMMON 约数研究
- 洛谷P2536 [AHOI2005]病毒检测
- 【AHOI2005】病毒检测
- bzoj1965: [Ahoi2005]SHUFFLE 洗牌
- BZOJ_P1968 [AHOI2005]COMMON 约数研究(数论)
- bzoj1965 [Ahoi2005]洗牌
- 【逆元】【bzoj 1965】: [Ahoi2005]SHUFFLE 洗牌
- bzoj1965 [Ahoi2005]SHUFFLE 洗牌
- bzoj1968: [Ahoi2005]COMMON 约数研究