Two strings HDU - 6170 递推

和之前的一道cf很像,但明显难了很多;
麻瓜的我模仿之前那道一直在模拟,没想到还可以递推,亏我最近还在做什么递推练习TT;
题意:给出原串与匹配串,问能否匹配原串中所有的字符。’.’可以匹配所有字符,‘*’是给前一个字符附加一个buff,使其可以变成0~无穷个同样的字符;
思路:bool dp[i][j]代表str2前i个字符能否和str1前j个字符匹配(因为我们是用1去匹配2嘛,所以把2做i了)
所以先要搞一个大循环枚举str2,然后一个里面再套一个循环枚举str1;
如果str2[i]==’点’ 或者 str1[j]==str2[i];dp[i][j]=dp[i-1][j-1];
然后考虑str2[i]=‘星’;
1::dp[i][j]=max(dp[i-2][j],dp[i-1][j]);如果dp[i-2][j]=1;那_*可以换成空字符使dp[i][j]=1;如果dp[i-1][j]=1;那*可省去;如果都等于那随便取哪种情况,只要能匹配成功就行了;
2::如果str1[j]==str1[j-1]就代表*可取多个字符,所以要考虑dp[i-1][j-1]||dp[i][j-1]是否匹配成功;
最后是其他情况则代表匹配不成功;因为初始化是false,所以可以省略;
ps:如果str2【i】==’*’;则dp[2][0]=1;
因为任意字符搭配*可省略,顺带防止下面re;
咸鱼一只。。。不知道为什么每次比赛完看了官方题解就一下子有思路了;

#include <bits/stdc++.h>
using namespace std;
const int maxn=2555;

char str1[maxn],str2[maxn];
bool dp[maxn][maxn];
int main()
{
    int T;
    scanf("%d\n",&T);
    while(T--)
    {
        memset(dp,false,sizeof(dp));
        scanf("%s%s",str1+1,str2+1);
        int l1=strlen(str1+1);
        int l2=strlen(str2+1);
        dp[0][0]=true;
        for(int i=1; i<=l2; i++)
        {
            if(i==2&&str2[2]=='*')
                dp[2][0] = true;
            for(int j=1;j<=l1;j++)
            {
                if(str2[i]=='.'||str1[j]==str2[i])
                    dp[i][j]=dp[i-1][j-1];
                else if(str2[i]=='*')
                {
                    dp[i][j]=max(dp[i-2][j],dp[i-1][j]);
                    if((dp[i-1][j-1]||dp[i][j-1])&&str1[j-1]==str1[j])
                        dp[i][j] = true;
                }
            }
        }
        if(dp[l2][l1])
            puts("yes");
        else
            puts("no");
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值