Luogu 2679 子串 (动态规划)
Luogu 2679 NOIP 2015 子串 (动态规划)
Description
有两个仅包含小写英文字母的字符串 A 和 B。现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出 的位置不同也认为是不同的方案。
Input
第一行是三个正整数 n,m,k,分别表示字符串 A 的长度,字符串 B 的长度,以及问
题描述中所提到的 k,每两个整数之间用一个空格隔开。 第二行包含一个长度为 n 的字符串,表示字符串 A。 第三行包含一个长度为 m 的字符串,表示字符串 B。
Output
输出共一行,包含一个整数,表示所求方案数。由于答案可能很大,所以这里要求输出答案对 1,000,000,007 取模的结果。
Sample Input
6 3 1
aabaab
aab
Sample Output
2
Http
Luogu:https://www.luogu.org/problem/show?pid=2679
Source
动态规划
解决思路
设\(F[i][j][k][0/1]\)表示当前选到\(A\)的第\(i\)位,匹配到\(B\)的第\(j\)位,是第\(k\)个子串。0表示\(A\)的该位必选,1表示选or不选都行。
考虑两种情况
若\(A[i]==B[j]\),则可以将新的这个字符串接在前一个子串后面,这时要求前面一个必选,则\(F[i][j][k][0]\)可以从\(F[i-1][j-1][k][0]\)转移过来,也可以新开一个子串,此时对前面的字符是否选取没有要求,所以可以从\(F[i-1][j-1][k-1][1]\)转移来。
若\(A[i]!=B[j]\)则\(F[i][j][k][0]=0\)。
在求完\(F[i][j][k][0]\)后,\(F[i][j][k][1]=F[i][j][k][0]+F[i-1][j][k][1]\)。注意滚动数组。
代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxN=1010;
const int maxM=210;
const int Mod=1000000007;
const int inf=2147483647;
int n,m,K;
char A[maxN];
char B[maxM];
int F[2][maxM][maxM][2];
int main()
{
scanf("%d%d%d",&n,&m,&K);
scanf("%s",(A+1));
scanf("%s",(B+1));
memset(F,0,sizeof(F));
F[0][0][0][1]=F[1][0][0][1]=1;//初始值
for (int i=1;i<=n;i++)
{
F[i%2][0][0][1]=1;
for (int j=1;j<=m;j++)
for (int k=1;k<=K;k++)
{
if (A[i]==B[j])
F[i%2][j][k][0]=(F[(i-1)%2][j-1][k][0]+F[(i-1)%2][j-1][k-1][1])%Mod;
else
F[i%2][j][k][0]=0;
F[i%2][j][k][1]=(F[i%2][j][k][0]+F[(i-1)%2][j][k][1])%Mod;
}
}
printf("%d\n",F[n%2][m][K][1]%Mod);
return 0;
}
Luogu 2679 子串 (动态规划)的更多相关文章
- luogu 2679 子串
子串 史上最简短的一篇博客,毕竟看题解ac心疼我的kmp /* f[i][j][k][0/1]表示A的前i个,B的前j个,用到了k个子串,当前字符选或者不选. 所以f[0][0][0][0]的方案数为 ...
- [Python]最长公共子序列 VS 最长公共子串[动态规划]
前言 由于原微软开源的基于古老的perl语言的Rouge依赖环境实在难以搭建,遂跟着Rouge论文的描述自行实现. Rouge存在N.L.S.W.SU等几大子评估指标.在复现Rouge-L的函数时,便 ...
- leetcode-5 最长回文子串(动态规划)
题目要求: * 给定字符串,求解最长回文子串 * 字符串最长为1000 * 存在独一无二的最长回文字符串 求解思路: * 回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文 ...
- [LUOGU] P2679 子串
一开始用一个f数组转移,发现不太对,状态有重叠部分 f[i][j][k]表示考虑了s的前i位,匹配到t的第j位,用了k个子串,且s的第i位必选 g[i][j][k]表示考虑了s的前i位,匹配到t的第j ...
- Luogu P2679 子串(字符串+dp)
P2679 子串 题意 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\ ...
- luogu P2258 子矩阵 |动态规划
题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第22.44行和第22.44.55列交叉 ...
- 【C++】最长回文子串/动态规划
ACM #include <bits/stdc++.h> using namespace std; const int maxn = 1010; char S[maxn]; int dp[ ...
- PAT1040 Longest Symmetric String (25分) 中心扩展法+动态规划
题目 Given a string, you are supposed to output the length of the longest symmetric sub-string. For ex ...
- Lintcode--005(最长公共子序列)
Given two strings, find the longest common subsequence (LCS). 最长公共子序列 Your code should return th ...
随机推荐
- 一个很好用的在线编辑、展示、分享、交流JavaScript 代码的平台
在发表博客时,有一些代码只能粘贴进去,而不能看到代码运行的效果,需要读者把代码粘贴进自己的编辑器,然后再运行看效果,这是一件很耗时的事情 在平时百度的时候,我发现一些网站可以在线预览功能,而且可以在线 ...
- [BUAA_SE_2017]案例分析-Week3
Week3 案例分析 一.调研评测 案例: 神策数据的数据概览功能 Demo: 电商类产品Demo 评价: d) 好,不错 个人评价:神策数据电商类产品Demo的数据概览功能是相当不错的.首先点击进入 ...
- Aspose for Maven 使用
https://blog.aspose.com/2014/08/12/aspose-for-maven-aspose-cloud-maven-repository/ https://marketpla ...
- Wshshell 脚本简单学习
WshShell 的简单语法 学习 同事给了一个脚本自动执行 部署命令 感觉挺好的 , 年前一直说要学习一下 但是一直没有学习(自己太懒了) 这次简单总结一下. 创建对象: Set WshShell ...
- ESXi内虚拟机带快照与不带快照的情况下简单性能对比.
1. 两个虚拟机配置相同都为2vCPU 8G内存 一个虚拟机内包含较多的快照且有内容梗概 一个虚拟机不包含快照直接只有一个虚拟机的vmdk磁盘文件 操作系统未windows server 2008r2 ...
- Linux 文件系统概览
本文导航 -定义07% -文件系统的基本功能12% -目录结构26% -Linux 统一目录结构50% -文件系统类型74% -挂载81% -结论90% -下个月92% 本文旨在高屋建瓴地来讨论 ...
- Delphi 导出数据至Excel的7种方法【转】
一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery): ...
- python之zip函数和sorted函数
# zip()函数和sorted()函数 # zip()函数:将两个序列合并,返回zip对象,可强制转换为列表或字典 # sorted()函数:对序列进行排序,返回一个排序后的新列表,原数据不改变 # ...
- Lodop强制分页LODOP.NewPage()和LODOP.NewPageA()
使用Lodop打印控件打印时,有自动分页,有手动强制分页,也可以两者结合使用,在使用两者结合的时候注意LODOP.NewPage()和LODOP.NewPageA()的区别,如果前面打印项自动分页不止 ...
- CPU性能过剩提升乏力影响未来行业发展吗?
导读 虽然CPU仍然在不断发展,但是它的性能已经不再仅仅受限于单个处理器类型或制造工艺上了.和过去相比,CPU性能提升的步伐明显放缓了,接下来怎么办,成为横亘在整个行业面前的大问题. 虽然CPU仍然在 ...