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

P2679 [NOIP2015 提高组] 子串

时间:2024-08-15 15:53:54浏览次数:18  
标签:子串 NOIP2015 P2679 50 字符串 组至 500

https://www.luogu.com.cn/problem/P2679
只能说是,超级好的一道例题

[NOIP2015 提高组] 子串

题目背景

NOIP2015 Day2T2

题目描述

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

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

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

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

样例 #1

样例输入 #1

6 3 1 
aabaab 
aab

样例输出 #1

2

数据范围

对于第 1 组数据:\(1≤n≤500,1≤m≤50,k=1\);
对于第 2 组至第 3 组数据:\(1≤n≤500,1≤m≤50,k=2\);
对于第 4 组至第 5 组数据:\(1≤n≤500,1≤m≤50,k=m\);
对于第 1 组至第 7 组数据:\(1≤n≤500,1≤m≤50,1≤k≤m\);
对于第 1 组至第 9 组数据:\(1≤n≤1000,1≤m≤100,1≤k≤m\);
对于所有 10 组数据:\(1≤n≤1000,1≤m≤200,1≤k≤m\)。

分析:
定义状态f[i][j][k][0/1]表示字符串A的前i个字符和字符串B的前j个字符用了k个子串,第四维为1表示A字符串的第i个字符必须用,为0表示A字符串的第i个字符不能用,匹配上的方案数。

可以分析出当a[i] == b[j]时,可以拼到a[i-1],b[j-1]之后(a[i-1] == b[j-1]),不再多开一个子串;也可以多开一个。当a[i-1] != b[j-1],则必须多开一个子串。
f[i][j][k][1] =f[i-1][j-1][k-1][1] + f[i-1][j-1][k][1] + f[i-1][j-1][k-1][0];
当a[i] != b[j]时,
f[i][j][k][1] = 0;

考虑f[i][j][k][0],也就是不管a[i]和b[j]相不相同,a[i]都不使用,还得匹配的上,说明b[j]一定

特别注意的是边界:

标签:子串,NOIP2015,P2679,50,字符串,组至,500
From: https://www.cnblogs.com/caterpillor/p/18361132

相关文章

  • 子串查找算法KMP
    什么是子串查找        字符串子串查找是一种在较长的字符串(通常称为"主串"或"文本")中寻找一个较短字符串(称为"模式串"或"子串")的过程。这是计算机科学中的一个基本问题,在文本编辑、信息检索、生物信息学等多个领域都有广泛应用。主要的子串查找算法包括:暴力匹配法(B......
  • LeetCode 3 无重复字符的最长子串
    题目描述给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度......
  • 动态规划:最长回文子串
    目录题目思路解题过程复杂度code 题目        给你一个字符串 s,找到 s 中最长的 回文子串示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb"提示:1<=s.length<=1000s 仅由数字和英文字母组成......
  • 代码随想录 day 47 回文子串 | 最长回文子序列
    回文子串回文子串解题思路dp数组的状态是判断以i结尾,j开始的字符串是否为回文,用bool类型存储,之后当i和j的字符串相等时,通过计算它们之间的距离和判断它们之间是否为回文串来进行递归。知识点回文,动态规划心得如果不看题解根本想不到怎么做最长回文子序列最长回文子序列......
  • L2-008 最长对称子串 C++
    对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定IsPAT&TAPsymmetric?,最长对称子串为sPAT&TAPs,于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:IsPAT&TAPsymmetric?输出样......
  • 【LeetCode:3. 无重复字符的最长子串 + 滑动窗口】
    ......
  • 最大子串和(三种方法实现)
    如果错误或不周,请指教谅解,感谢你的观看题目大意:对于一个数组a,有n个整数,求出最大的子串和,子串中的元素数量至少为1个举个例子,求下列最大的子串和61-252-35  输出为92-1-2输出为-1下面提供代码,代码中自含解释(就不提供主函数,可能会影响观感)第一种......
  • 浅记基本子串结构构建的二三事
    这东西真是学一次忘一次,为了不再忘了它也为了之后讲课可能要讲这玩意,所以梳理一下基本子串结构的一些基本逻辑。这不是学习笔记,更类似于提纲,所以讲得比较抽象……QwQ假设我们不是苛求严谨性的理论计算机科学研究者,而只是一位期望用基本子串结构做做题的一名普通OIer。那么关于它......
  • [题解]P2672 [NOIP2015 普及组] 推销员
    P2672[NOIP2015普及组]推销员为了便于操作,将住户信息按疲劳值从大到小排序。那么对于选\(X\)个住户,有\(2\)种情况:选疲劳值前\(X\)大的住户,答案即为\(\sum\limits_{i=1}^Xa[i]+2\times\max\limits_{i=1}^Xs[i]\)。选疲劳值前\(X-1\)大的住户,然后在剩下的住户中,距离比......
  • 金币 NOIP2015 普及组 T1
    Hello!我是loveyou的小羊生煎(>-<)通过我分享的实用技巧和策略,你将在你的领域脱颖而出,引领潮流!无论你遇到什么挑战,我将一直在你身边,为你提供支持和鼓励!2话不说上代码说明国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚......