hdu 6170

来源:互联网 发布:邮件传输协议端口号 编辑:程序博客网 时间:2024/05/21 20:21

题目链接:点击打开链接


题解思路:因为数据就2500我们很容易想到dp,要是有想到dp那实现方法也很简单,看代码就懂了。


代码:

#include<bits/stdc++.h>using namespace std;typedef long long ll;const int mx = 3e3+10;int n,m,len1,len2;char str[mx],stc[mx];int dp[mx][mx];int main(){    int t;    scanf("%d",&t);    while(t--){        scanf("%s",str+1);        scanf("%s",stc+1);        len1 = strlen(str+1);        len2 = strlen(stc+1);        memset(dp,0,sizeof(dp));        dp[0][0] = 1;        for(int i=1;i<=len2;i++){            if(i==2&&stc[i]=='*') dp[i][0]  = 1;            for(int j=1;j<=len1;j++){                if(isalpha(stc[i])){                    if(str[j]==stc[i]) dp[i][j] = dp[i-1][j-1];                }else if(stc[i]=='.'){                    dp[i][j] = dp[i-1][j-1];                }else{                    dp[i][j] = max(dp[i][j],max(dp[i-1][j],dp[i-2][j]));                    if((dp[i][j-1]||dp[i-1][j-1])&&str[j]==str[j-1])                    dp[i][j] = max(dp[i][j],max(dp[i][j-1],dp[i-1][j-1]));                }            }        }        puts(dp[len2][len1]?"yes":"no");    }    return 0;}


原创粉丝点击