2017ACM暑期多校联合训练 - Team 9 1010 HDU 6170 Two strings (dp)
Problem Description
Giving two strings and you should judge if they are matched.
The first string contains lowercase letters and uppercase letters.
The second string contains lowercase letters, uppercase letters, and special symbols: “.” and “”.
. can match any letter, and * means the front character can appear any times. For example, “a.b” can match “acb” or “abb”, “a” can match “a”, “aa” and even empty string. ( “” will not appear in the front of the string, and there will not be two consecutive “”.
Input
The first line contains an integer T implying the number of test cases. (T≤15)
For each test case, there are two lines implying the two strings (The length of the two strings is less than 2500).
Output
For each test case, print “yes” if the two strings are matched, otherwise print “no”.
Sample Input
3
aa
a*
abb
a.*
abb
aab
Sample Output
yes
yes
no
题意:
给定两个字符串,一个是主串,另一个模拟串,主串中只含有大小写字符,模拟串中除了含有大小写字符外,还有'.'和'','.'可以与主串中的任意的字符匹配,''可以将它前面的一个字符扩展或则删去,问这两个字符串是否能够匹配成功。
分析:
str表示主串,str1表示模拟串,可以假设dp[i][j]表示str1[1,i]与str[1,j]是否匹配。
显然dp[0][0] = true,都没有开始的时候默认是匹配的。
如果 str1[i] == . 或者str1[i] == str[j]时,dp[i][j] 的状态取决于状态dp[i-1][j-1]
如果str1[i] == ‘*‘时,因为这个字符可以可以延伸或则删除前一个 dp[i][j] == dp[i-1][j] | dp[i-2][j],
而当(dp[i-1][j-1] || dp[i][j-1]) && str[j-1] == str[j] 时,dp[i][j]必定为true;
具体的看一下代码把:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 2510;
char str[N], str1[N];
bool dp[N][N];
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        memset(dp, false, sizeof(dp));
        scanf("%s %s",str+1, str1+1);
        int len = strlen(str+1), len1 = strlen(str1+1);
        dp[0][0] = true;
        for(int i = 1; i <= len1; i ++)
        {
            if(i == 2 && str1[i] == '*') dp[i][0] = true;///这样的话相当于完全可以将模拟串之前的全部去掉
            for(int j = 1; j <= len; j ++)
            {
                if(str1[i] == '.' || str1[i] == str[j])///模拟串是点或者模拟串与主串的字符相等,匹配与否取决于每个串前一个字符
                    dp[i][j] = dp[i-1][j-1];
                else if(str1[i] == '*')///模拟串是’*‘的话
                {
                    dp[i][j] = dp[i-2][j] | dp[i-1][j];///模拟串看前一个是否与祖串匹配,或则去掉前一个之后是否与祖串匹配
                    if((dp[i-1][j-1] || dp[i][j-1]) && str[j-1] == str[j])///主串的当前位置与前一个位置相等,只要前面的位置匹配或者
                        dp[i][j] = true;
                }
            }
        }
        printf("%s\n",dp[len1][len]?"yes":"no");
    }
    return 0;
}
												
											2017ACM暑期多校联合训练 - Team 9 1010 HDU 6170 Two strings (dp)的更多相关文章
- 2017ACM暑期多校联合训练 - Team 7 1010    HDU 6129   Just do it        (找规律)
		
题目链接 Problem Description There is a nonnegative integer sequence a1...n of length n. HazelFan wants ...
 - 2017ACM暑期多校联合训练 - Team 6 1010    HDU   6105    Gameia  (博弈)
		
题目链接 Problem Description Alice and Bob are playing a game called 'Gameia ? Gameia !'. The game goes ...
 - 2017ACM暑期多校联合训练 - Team 4 1004   HDU     6070    Dirt Ratio    (线段树)
		
题目链接 Problem Description In ACM/ICPC contest, the ''Dirt Ratio'' of a team is calculated in the foll ...
 - 2017ACM暑期多校联合训练 - Team 9 1005     HDU  6165    FFF at Valentine   (dfs)
		
题目链接 Problem Description At Valentine's eve, Shylock and Lucar were enjoying their time as any other ...
 - 2017ACM暑期多校联合训练 - Team 8 1006      HDU  6138   Fleet of the Eternal Throne   (字符串处理  AC自动机)
		
题目链接 Problem Description The Eternal Fleet was built many centuries ago before the time of Valkorion ...
 - 2017ACM暑期多校联合训练 - Team 8 1002      HDU 6134    Battlestation Operational   (数论   莫比乌斯反演)
		
题目链接 Problem Description The Death Star, known officially as the DS-1 Orbital Battle Station, also k ...
 - 2017ACM暑期多校联合训练 - Team 8 1011    HDU 6143    Killer Names      (容斥+排列组合,dp+整数快速幂)
		
题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...
 - 2017ACM暑期多校联合训练 - Team 8   1008   HDU 6140        Hybrid Crystals  (模拟)
		
题目链接 Problem Description Kyber crystals, also called the living crystal or simply the kyber, and kno ...
 - 2017ACM暑期多校联合训练 - Team 7 1009     HDU 6128       Inverse of sum   (数学计算)
		
题目链接 Problem Description There are n nonnegative integers a1-n which are less than p. HazelFan wants ...
 
随机推荐
- AJAX 跨域问题 php
			
原生ajax请求方式: var xhr = new XMLHttpRequest(); xhr.open("POST", "http://xxxx.com/demo/b/ ...
 - 关于request对象的parameter和attribute
			
request对象的parameter相关method用于浏览器和服务之间传递数据,且是单向的,只能由浏览器写数据,request读数据,所以只有 String getParameter(String ...
 - 第212天:15种CSS居中的方式,最全了
			
CSS居中是前端工程师经常要面对的问题,也是基本技能之一.今天有时间把CSS居中的方案整理了一下,目前包括水平居中,垂直居中及水平垂直居中方案共15种.如有漏掉的,还会陆续的补充进来,算做是一个备忘录 ...
 - final,finally和 finalize的区别
			
中等区别: 虽然这三个单词在Java中都存在,但是并没有太多关联: final:java中的关键字,修饰符. 1.如果一个类被声明为final,就意味着它不能再派生出新的子类,不能作为父类被继承.因 ...
 - 【转】LINQ多表关联关联条件
			
转:http://www.dingcankong.com/linq%E4%B8%A4%E8%A1%A8%E8%81%94%E5%90%88%E6%9F%A5%E8%AF%A2/ 答案如下: var m ...
 - 【刷题】UOJ #274 【清华集训2016】温暖会指引我们前行
			
寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 "冻死宝宝了!" 这时 远处的天边出现了一位火焰之神 "我将赐予你们温暖和希望! ...
 - Beta 完结撒花 —— 事后诸葛亮
			
写在前面 林燊大哥 团队成员 短学号 名 2325 燊(队长) 1232 志豪 1131 喜源 2523 宏岩 2230 恺翔 2509 钧昊 2507 俞辛 2501 宇航 2502 柏涛 项目宣传 ...
 - java-----遇到问题------myeclipse----发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误
			
情况 myeclipse发布项目到tomcat中lib文件夹没有子项目产生ClassNotFoundException错误. 这种情况一般是 .classpath文件设置的输出路径不对导致的. 1.. ...
 - C++命名规则 (转载仅作参考)
			
如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一.带层次结构.清晰明了的命名准则就是必不可少而且非常好用的工具. 活跃在生物学.化学.军队.监狱.黑社会.恐怖组织等各个领域内的大量有识 ...
 - ribbion的负载均衡之端口的切换
			
可以说在这里被坑了很久,终于今天在大神的指导下,成功实现了负载均衡,切换不同的端口,这里来记录下,首先来看下效果图吧: 到底是怎么实现的呢?到底是如何切换的呢? 具体来讲: 几个步骤,启动服务注册中心 ...