P2679 子串

Posted ukcxrtjr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2679 子串相关的知识,希望对你有一定的参考价值。

题面:https://www.luogu.org/problem/P2679

本题设f[i][p]为到i位置选了p个子串的方案数,g[i][p]为从上一个子串结束位置到i位置选了p个子串的方案数.
则当a[i]!=b[j]时,g[j][p]=0;
当a[i]==b[j]时,g[i][p]=g[i-1][p]+f[i-1][p-1](注意:这里就是为了把当前正在处理的这个子串给连起来)
f[i][p]=f[i][p]+g[i][p]

Code:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=205,mod=1e9+7;
int n,m,k,f[N][N],g[N][N];
char a[N*5],b[N];
int main(){
    scanf("%d%d%d%s%s",&n,&m,&k,a+1,b+1);
    f[0][0]=1;
    for(int i=1;i<=n;i++){
        for(int j=m;j>=1;j--){
            for(int p=k;p>=1;p--){
                if(a[i]!=b[j]){
                    g[j][p]=0;
                    continue;
                }
                g[j][p]=(g[j-1][p]+f[j-1][p-1])%mod;
                f[j][p]=(f[j][p]+g[j][p])%mod;
            }
        }
    }
    printf("%d
",f[m][k]);
    return 0;
}

以上是关于P2679 子串的主要内容,如果未能解决你的问题,请参考以下文章

P2679 子串

P2679 子串

洛古 P2679 子串 题解

P2679 子串

Luogu P2679 子串(字符串+dp)

P2679 子串