hdu 6170
题意:A,B2个字符串,.可以代替任意字符,*表示前面那个字符的任意次(0,1,2....,问是否完全匹配
思路:dp[i][j]表示A第i个B第j个是否匹配
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=2502; 5 6 char s1[N],s2[N]; 7 int dp[N][N]; 8 9 int main(){ 10 int t; 11 cin>>t; 12 while(t--){ 13 scanf("%s",s1+1); 14 scanf("%s",s2+1); 15 memset(dp,0,sizeof(dp)); 16 dp[0][0]=1; 17 int n=strlen(s1+1),m=strlen(s2+1); 18 for(int i=2;i<=m;i++) 19 dp[0][i]=dp[0][i-2]; 20 for(int i=1;i<=n;i++){ 21 for(int j=1;j<=m;j++){ 22 if(s2[j]=='*'){ 23 if(dp[i][j-2]||dp[i][j-1]) dp[i][j]=1; 24 else if((s1[i]==s2[j-1] || ( s2[j-1] == '.'&& s1[i]==s1[i-1] ) ) && dp[i-1][j]) dp[i][j]=1; 25 else dp[i][j]=0; 26 } 27 else { 28 if(s1[i]==s2[j]||s2[j]=='.'){ 29 if(dp[i-1][j-1]) dp[i][j]=1; 30 else dp[i][j]=0; 31 } 32 else dp[i][j]=0; 33 } 34 } 35 } 36 if(dp[n][m]) printf("yes\n"); 37 else printf("no\n"); 38 } 39 return 0; 40 }