hdu 6170 Two strings
来源:互联网 发布:罗莱蚕丝被 知乎 编辑:程序博客网 时间:2024/06/06 04:25
http://acm.hdu.edu.cn/showproblem.php?pid=6170
给你两个串a串和b串,问b串能否变成a串。b串特殊的地方就是有一个能变成任意字符的’.’号和能使前一个字符出现任意(包括0)次的‘*’号。
比赛的时候一点都没往dp想过,觉得是用某种字符串算法,看了题解之后才明白。似乎自己构建一个自动机也是可过过得。
这一题的特殊之处就是对于’*’的处理,’.’可以看做是任意字符所以还好处理一些,但是星号还可以使字符消失。
#include<bits/stdc++.h>using namespace std;bool dp[2600][2600];int main(){ int T, len1, len2; char str1[2600], str2[2600]; scanf("%d", &T); while(T--) { scanf("%s%s", str1+1, str2+1); len1=strlen(str1+1); len2=strlen(str2+1); memset(dp, 0, sizeof(dp)); dp[0][0]=true; //i表示A串0-i个字符,j表示B串0-j个字符 for(int i=1; i<=len1; i++) { for(int j=1; j<=len2; j++) { //当B串是X*(X表示任意字符,但是题目说了X不会也是星号)的时候,可以由这两个字符构成长度为0的A串,就是消去的意思。 if(j==2&&str2[j]=='*') dp[0][j]=true; if(str1[i]==str2[j]||str2[j]=='.') dp[i][j]=dp[i-1][j-1]; if(str2[j]=='*') { //dp[i][j-2]表示的消去前一个值,dp[i][j-1]表示前一个值出现1次 dp[i][j]=dp[i][j-2]|dp[i][j-1]; if(str1[i]==str1[i-1]) dp[i][j]=dp[i][j]|dp[i-1][j-1]|dp[i-1][j]; } // printf("dp[%d][%d]=%d\n", i, j, dp[i][j]); } } if(dp[len1][len2]==true) printf("yes\n"); else printf("no\n"); } return 0;}
这一场挺多dp题的,感觉除非是很明显的dp题,不然我都看不出来。多做点dp吧。。
阅读全文
0 0
- hdu 6170 Two strings
- HDU 6170:Two strings
- HDU 6170 Two strings
- hdu 6170 Two strings
- HDU-6170 Two strings
- hdu 6170 Two strings
- HDU 6170 Two strings
- hdu-6170 Two strings
- 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模拟
- 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)
- 算法题/层次遍历二叉树
- Android SVG动画animated-vector使用
- 位图的简单实现(bitMap)
- 多版本jdk/eclipse/tomcat的处理
- Hadoop Streaming 做大数据处理详解
- hdu 6170 Two strings
- Android -- 获取接口数据的三个方法
- [USACO06FEB]数字三角形Backward Digit Su…
- POJ3259--Wormholes(SPFA)
- 前端学习(十三)CSS margin的使用
- PAT basic 1069
- 3373-数据结构实验之查找一:二叉排序树
- U盘其它用途
- 通过eslint统一前端IDE的编码风格,避免git冲突