[Luogu] 子串

Posted xayata

tags:

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

https://www.luogu.org/problemnew/show/P2679

DP

f(k,i,j)f(k,i,j)表示分了k段,用了第一个串中的前i个数字,已经构成了第二个串的前j个的方案数

f(k,i,j)={f(k1,l,j1)f(k1,l,j1)+f(k,i1,j1)s1[i]==s2[j]s1[i1]!=s2[j1]s1[i]==s2[j]s1[i1]==s2[j1]0<l<i0<l<i
#include<iostream>

long long f[201][201] = {1}, sum[201][201], n, m, ki;

char a[1001], b[201];

int main() {
    std:: cin >> n >> m >> ki >> a >> b;
    for(int i = 1; i <= n; i ++)
        for(int j = m; j >= 1; j --)
            for(int k = ki; k >= 1; k --)
                f[j][k] = (f[j][k] + (sum[j][k] = a[i - 1] == b[j-1] ? 
                            sum[j - 1][k] + f[j - 1][k - 1] : 0)) % 1000000007;
    std:: cout << f[m][ki];
}

 

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

[Luogu] 子串

luogu P4051 [JSOI2007]字符加密

Luogu P2679 子串(字符串+dp)

luogu P2679——子串

luogu3856TJOI2008公共子串 [动态规划]

[luogu2679] 子串 (多维dp)