zoukankan      html  css  js  c++  java
  • CF1336C Kaavi and Magic Spell(区间dp)

    根据题意,本题只关心前缀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
  • 相关阅读:
    设计模式—适配器模式
    设计模式—策略模式 状态模式
    设计模式——装饰模式和代理模式
    C++常考算法
    ModelState.AddModelError使用
    Json
    ref与out
    三层与mvc
    新的方法(Set<T>)实现mvc的crud
    【程序45】
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/12798041.html
Copyright © 2011-2022 走看看