首页 > 其他分享 >洛谷 P2679 [NOIP2015 提高组]子串

洛谷 P2679 [NOIP2015 提高组]子串

时间:2022-12-23 10:35:07浏览次数:49  
标签:子串 NOIP2015 洛谷 sub int P2679 d% MAXM define

  • \(70pts\) :

记 \(sub_A(i)\) 表示 \(A\) 的前 \(i\) 个字符构成的子串,相应地,\(sub_B(i)\) 为 \(B\) 的前 \(i\) 个字符构成的子串。

设 \(f(i, j, k)\) 表示在 \(sub_A(i)\) 中选出 \(k\) 个互不相交的子串,且按照它们在 \(sub_A(i)\) 中出现的顺序首尾相连后与 \(sub_B(i)\) 相同的方案数。

设 \(p \in \N\),满足 \(\forall l \in [0, p - 1], A_{i - l} = B_{j - l} \and A_{i - p} \ne B_{j - p}\)。

\[f(i, j, k) = f(i - 1, j, k) + \sum_{l = 1}^p f(i - l, j - l, k - 1) \]

时间复杂度 \(O(nmk)\),但空间复杂度 \(O(nmk)\),会 MLE。

  • \(100pts\):

消去 \(i\) 这一维后,就不能随时计算 \(\sum\limits_{l = 1}^p f(i - l, j - l, k - 1)\) 了,所以令 \(s(j, k) = \sum\limits_{l = 1}^p f(i - l, j - l, k - 1)\),每次先更新 \(s(j, k)\),再根据 \(s(j, k)\) 更新 \(f(j, k)\) 即可。

\[s(j, k) = \left\{ \begin{aligned} s(j - 1, k) + f(j - 1, k)&, A_i = B_j \\ 0&, A_i \ne B_j \end{aligned} \right. \]

代码:

#include <bits/stdc++.h>

#define MAXN 1100
#define MAXM 210
#define MOD 1000000007

using namespace std;

int n, m, p, K, f[MAXM][MAXM], s[MAXM][MAXM];
char A[MAXN], B[MAXM];

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; j--) {
            for (int k = K; k; k--) {
                if (A[i] == B[j]) s[j][k] = (f[j - 1][k - 1] + s[j - 1][k]) % MOD;
                else s[j][k] = 0;
                f[j][k] = (f[j][k] + s[j][k]) % MOD;
            }
        }
    }
    printf("%d", f[m][K]);
    return 0;
}

标签:子串,NOIP2015,洛谷,sub,int,P2679,d%,MAXM,define
From: https://www.cnblogs.com/chy12321/p/17000147.html

相关文章

  • 洛谷P2680 运输计划(LCA + 二分 + 树上边差分)
    洛谷P2680运输计划​ 现在有一棵树,每条树边上都有正权值。接下来,有m个询问,每次询问给出两个结点,这两个结点之间有一条路径。现在你可以任选一条树边,将其边权置为0,请输......
  • 洛谷 P5401 [CTS 2019] 珍珠 题解
    题目链接令\(c_i\)表示第i种颜色的珍珠的数量,显然我们最多能装的瓶数是\(\sum\lfloor\frac{c_i}2\rfloor\)。也就是说,\(c_i\)为奇数的\(i\)的数量不能太多,这个数量要......
  • 跳石头(NOIP2015)
    AcWing洛谷解题思路这题看到最短跳跃距离尽可能长就会想到二分但是我们二分的\(check\)函数怎么写呢可以看到限制条件移走的石头最多只能是\(m\)块我们二分这个最短......
  • 洛谷 P6580 [Ynoi 2019] 美好的每一天~ 不连续的存在 题解
    既然是YNOI那肯定是要分块的。先考虑树是一条链的情况,可以直接回滚莫队,对n个节点组成的序列分块。在回滚莫队的过程中,当前维护的区间一共会扩展\(O(n\sqrtn)\)次,每次都是......
  • 洛谷 P1712 [NOI2016] 区间
    很多套路糅合在一起的一道题。记\(len_i=r_i-l_i\)。则所求转化为一个有\(m\)个区间的集合\(S\),满足:存在一个\(x\),使得对于所有\(S\)中的区间\(i\),有\(l_......
  • 洛谷P3224 [HNOI2012]永无乡 题解 splay tree 启发式合并
    题目链接:https://www.luogu.com.cn/problem/P3224主要知识点是:树上启发式合并,即每次合并将小的树里面的每个点合并大大的树里面,时间复杂度\(O(n\log^2n)\)。同时需要......
  • 洛谷-P1450 硬币购物
    P1450硬币购物容斥||\(dp\)+单调队列优化容易看出是个多重背包,然后拿单调队列优化一下后,计算量为\(O(4ns)\)这种做法的话就是单调队列优化板子题#include<bits/......
  • P2661 [NOIP2015 提高组] 信息传递
    P2661[NOIP2015提高组]信息传递题目简述第i个人可以将自己的信息传给第\(t_i\)个人,当有人从别人那里得到自己信息时就结束,问最少要进行多少轮思路这题感觉真的很巧......
  • 洛谷 P1020 导弹拦截(递增子串 DP )
    题目大意:有一个数列,我们要获取一组子串,这个子串必须单调不增。问:(1)最长我们可以获取多长的这种子串(2)这个数列中最多有多少种这种子串解题思路:其中问题一是很典型的DP问题,最......
  • 洛谷 P1087 FBI树
    题目大意:已知一棵树由字符串组成,规定:若节点全1把这节点称为I节点。若节点全0把节点称为B节点。若节点含0同时含1把节点称为F节点。现在有一个字符串N长,左子树是前一半字......