zoukankan      html  css  js  c++  java
  • P2679 子串

    题目描述

    有两个仅包含小写英文字母的字符串 A 和 B。

    现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串 B 相等?

    注意:子串取出的位置不同也认为是不同的方案。

    输入格式

    第一行是三个正整数 n,m,k,分别表示字符串 A 的长度,字符串 B 的长度,以及问题描述中所提到的 k,每两个整数之间用一个空格隔开。

    第二行包含一个长度为 n 的字符串,表示字符串 A。

    第三行包含一个长度为 m 的字符串,表示字符串 B。

    输出格式

    一个整数,表示所求方案数。

    由于答案可能很大,所以这里要求输出答案对 1000000007 取模的结果。

    输入输出样例

    输入 #1

    6 3 1 
    aabaab 
    aab
    

    输出 #1

    2
    

    输入 #2

    6 3 2 
    aabaab 
    aab
    

    输出 #2

    7
    

    输入 #3

    6 3 3 
    aabaab 
    aab
    

    输出 #3

    7
    

    ​ 尝试了两种方DP法,一种是课件上的,没调出来;一种是题解里的。

    ​ 一道经典的匹配DP,用(f[i][j][k])表示从A中前i个字符取出k个不重复子串,与B中前j个字符相同的方案数。

    [f(i,j,k)=\f(i−1,j,k) Ai eq Bj \f(i−1,j,k)+f(i−1,j−1,k−1) Ai=Bj,A_{i−1} eq B_{j−1} \f(i−1,j,k)+f(i−1,j−1,k−1)+f(i−2,j−2,k−1)Ai=Bj,A_{i−1}=B_{j−1},A_{i−2} eq B_{j−2} ]

    设p满足:

    (forall xin[0,p], A_{i-x}=B_{j-x})

    (A_{i-p-1} eq B_{j-p-1})

    则有:

    (f(i,j,k)=egin{cases}f(i-1,j,k)&,A_i eq B_j\ f(i-1,j,k)+sumlimits^{p+1}_{t=1}f(i-t,j-t,k-1)&,A_i=B_jend{cases})

    #include<iostream>
    
    using namespace std;
    
    long long f[201][201], sum[201][201], n, m, ki;
    char a[1001], b[201];
    
    int main(){
    
        cin >> n >> m >> ki >> a >> b;
        f[0][0] = 1;
        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;
        cout << f[m][ki];
    
        return 0;
    }
    
  • 相关阅读:
    1012 The Best Rank (25 分)(排序)
    1011. World Cup Betting (20)(查找元素)
    1009 Product of Polynomials (25 分)(模拟)
    1008 Elevator (20 分)(数学问题)
    1006 Sign In and Sign Out (25 分)(查找元素)
    1005 Spell It Right (20 分)(字符串处理)
    Kafka Connect 出现ERROR Failed to flush WorkerSourceTask{id=local-file-source-0}, timed out while wait
    flume、kafka、avro组成的消息系统
    Java23种设计模式总结【转载】
    Java编程 思维导图
  • 原文地址:https://www.cnblogs.com/czhui666/p/13594034.html
Copyright © 2011-2022 走看看