hdu6170-多看几遍之DP&递推&字符串-Two strings
来源:互联网 发布:ipadapp下载不了软件 编辑:程序博客网 时间:2024/06/07 19:18
http://acm.hdu.edu.cn/showproblem.php?pid=6170
给定两个串。
a串是正常串。
b串中有两种元素。
1 种是* ,可以让前面那个出现任意次(甚至让他出现0次)
2 是. 和任意字符匹配。
too young 系列。
日后,用搜索也写写,应该也行。
可以发现 几种状态转移。
① 当为 . 时,这时没的说,由dp[i-1][j-1】得来
② 当为 * 时,分为三种情况。
① 把前面的和自己都清0, 这样为dp[i-2][j].
② 把自己置0 这样为dp[i-1][0]
③ 当此状态或者上一次 的和j-1可以匹配,(由之间的匹配的)
并且 b[j-1]==b[j]则可以匹配。
③ 当相等时,由dp[i-1][j-1].
#include <bits/stdc++.h>using namespace std;/* dp太烂。 还是 too young*/const int maxn=2400;bool dp[maxn][maxn];char a[maxn];char b[maxn];int main(){ int t; scanf("%d",&t); while(t--){ cin>>a+1; cin>>b+1; int len1=strlen(a+1); int len2=strlen(b+1); //cout<<len1<<endl; //cout<<len2<<endl; memset(dp,false,sizeof(dp)); dp[0][0]=true; for(int i=1;i<=len2;i++){ if(i>=2&&b[i]=='*') dp[i][0]=true;//全部置为0 for(int j=1;j<=len1;j++){ if(b[i]=='.'||b[i]==a[j]) dp[i][j]=dp[i-1][j-1]; else if(b[i]=='*'){ dp[i][j]=dp[i-1][j]|dp[i-2][j]; if((dp[i-1][j-1]||dp[i][j-1])&&a[j]==a[j-1]) dp[i][j]=true; } } } if(dp[len2][len1]) puts("yes"); else puts("no"); } return 0;}
阅读全文
0 0
- hdu6170-多看几遍之DP&递推&字符串-Two strings
- Two strings hdu6170 dp递推
- 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】
- [LeetCode] DP之 Minimum ASCII Delete Sum for two Strings
- hdu6170(dp)
- hdu 6170 Two strings dp
- hdu 6170 Two strings(DP)
- HDU 6170(Two strings-DP)
- hdu 6170 Two strings(dp)
- koa-router源码分析
- hdu4027(线段树)
- 三种LCA算法(一):Doubly算法(倍增算法)
- @media 媒体查询
- redis学习
- hdu6170-多看几遍之DP&递推&字符串-Two strings
- c# 如何调用非托管函数
- ImportError: No module named 'pip._vendor.retrying'
- JVM参数设置、分析
- jzoj5331 【NOIP2017提高A组模拟8.23】壕游戏
- 测试图片
- Array Nesting 问题及解法
- Sublime Text 3 配置文件详解
- java面试题---请用多线程写死锁