Two strings hdu6170 dp递推
来源:互联网 发布:淘宝买家怎么提升等级 编辑:程序博客网 时间:2024/06/12 18:10
题意:给出两个字符串,第一个字符串只包含小写或者大写字母,第二个字符串包含小写或者大写字母或者特殊字符“.”和“*”,这里“.”可以替换为任意字符,但是不能变成空。
这里“a*”可以变成空串,可以变成a,也可以是aa,也可以是aaa,还可以是aaaa.以此类推,不限长度。
这里“a*”可以变成空串,可以变成a,也可以是aa,也可以是aaa,还可以是aaaa.以此类推,不限长度。
问第二个串和第一个串是否能够完全相等。
思路:dp记录状态,写记忆化超时了,所以只能正着推了,设d[i][j][k]为第一个串0-i和第二个串0-j状态为k时是否能匹配,k=1时代表可以使用若干个s2[j],也就是说,只在当前s2[j]为‘*’或者后一位为‘*’时状态更新。不太好说,意思表达不出来,详见代码。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <map> #include <cmath> #include <set> #include <queue> using namespace std; typedef long long ll; const int INF=1e9+100; const int mod=1e9+7;const int N=2502;bool d[N][N][2];char s1[N],s2[N];int main(){ int T; scanf("%d",&T); while(T--){ scanf("%s%s",s1+1,s2+1); int len1=strlen(s1+1),len2=strlen(s2+1); d[0][0][1]=d[0][0][0]=1; for(int i=1;i<=len2;i++) d[0][i][1]=d[0][i][0]=1; for(int i=1;i<=len1;i++){ for(int j=1;j<=len2;j++){ d[i][j][1]=d[i][j][0]=0; if(s2[j]=='*'){ d[i][j][0]=d[i][j][0]|d[i][j-2][0]|d[i][j-2][1]; d[i][j][1]=d[i][j][1]|d[i][j-1][1]|d[i][j-1][0]; }else if(s2[j]=='.'){ if(s2[j+1]=='*'){ if(d[i-1][j][1]==1&&s1[i]==s1[i-1]) d[i][j][1]=1; d[i][j][1]=d[i][j][1]|d[i-1][j-1][0]|d[i-1][j-1][1]; d[i][j][0]=d[i][j][0]|d[i][j-1][0]|d[i][j-1][1]; }else{ d[i][j][0]=d[i][j][0]|d[i-1][j-1][0]|d[i-1][j-1][1]; } }else{ if(s2[j+1]=='*'){ if(d[i-1][j][1]==1&&s1[i]==s2[j]) d[i][j][1]=1; d[i][j][1]=d[i][j][1]|d[i-1][j-1][0]|d[i-1][j-1][1]; if(s1[i]!=s2[j]) d[i][j][1]=0; d[i][j][0]=d[i][j][0]|d[i][j-1][0]|d[i][j-1][1]; }else{ d[i][j][0]=d[i][j][0]|d[i-1][j-1][0]|d[i-1][j-1][1]; if(s1[i]!=s2[j]) d[i][j][0]=0; } } } } if(d[len1][len2][1]||d[len1][len2][0]) printf("yes\n"); else printf("no\n"); } return 0;}
阅读全文
0 0
- Two strings hdu6170 dp递推
- hdu6170-多看几遍之DP&递推&字符串-Two strings
- HDU6170-Two strings 多校9 dp
- HDU6170-Two strings
- HDU6170-Two strings
- HDU6170 Two strings dp 多校联赛第9场
- hdu6170 Two strings【regex真好用】
- [正则表达式] hdu6170 two strings
- HDU6170 Two strings(动态规划)
- HDU6170 Two strings(dp,2017 HDU多校联赛 第9场)
- hdu6170(dp)
- HDU_6170 Two strings 【DP】
- hdu6170(dp)
- hdu 6170 Two strings dp
- hdu 6170 Two strings(DP)
- HDU 6170(Two strings-DP)
- hdu 6170 Two strings(dp)
- hdu 6170 Two strings dp模拟
- HttpClient的GET和POST请求
- STORM入门之(集成Redis)
- IOS 新手入门实现第一个HelloWorld项目
- 线程锁Java.util.concurrent.lock与Synchronized区别简述
- 【错误解决】Intellj(IDEA) warning no artifacts configured
- Two strings hdu6170 dp递推
- [自用门户]div居中显示,加在style里面
- Servlet学习
- 高通平台常用缩写
- POJ-1739:Tony's Tour
- 删除目录及子目录下指定的文件
- AJAX_idea
- MongoDb账号验证
- Java Enum枚举替代方案--Android IntDef/StringDef Annotation注解