首页 > 其他 > 详细

CF1336C Kaavi and Magic Spell(区间dp)

时间:2020-04-29 00:10:57      阅读:77      评论:0      收藏:0      [点我收藏+]

根据题意,本题只关心前缀t是否匹配,而其他位置并不在意

因此我们将题目抽象成将s转转化为t串,其中t串的前m个是指定的,后面的是随意的

又因为s串从头往后并且可以插到两边,自然想到了区间dp,看数据范围也感觉很对,因为区间dp就是向两边扩充

技术分享图片
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
const int mod=998244353;
int f[3010][3010];
int main(){
    string s,t;
    cin>>s>>t;
    s=" "+s;
    t=" "+t;
    int len,l,r;
    int n=(int)s.size()-1;
    int m=(int)t.size()-1;
    for(int i=1;i<=n+1;i++)
        f[i][i-1]=1;
    for(len=1;len<=n;len++){
        for(l=1;l+len-1<=n;l++){
            r=l+len-1;
            if(l>m||s[len]==t[l])
                f[l][r]=(f[l][r]+f[l+1][r])%mod;
            if(r>m||s[len]==t[r])
                f[l][r]=(f[l][r]+f[l][r-1])%mod;
        }
    }
    int ans=0;
    for(int i=m;i<=n;i++)
        ans=(ans+f[1][i])%mod;
    cout<<ans<<endl;

}
View Code

 

CF1336C Kaavi and Magic Spell(区间dp)

原文:https://www.cnblogs.com/ctyakwf/p/12798041.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!