[vijos1982][NOIP2015]子串
Description
有两个仅包含小写英文字母的字符串和
。现在要从字符串
中取出
个互不重叠的非空子串,然后把这
个子串按照其在字符串
中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得这个新串与字符串
相等?注意:子串取出的位置不同也认为是不同的方案。
Input
第一行是三个正整数,分别表示字符串
的长度,字符串
的长度,以及问题描述中所提到的
,每两个整数之间用一个空格隔开。
第二行包含一个长度为的字符串,表示字符串
。
第三行包含一个长度为的字符串,表示字符串
。
Output
输出共一行,包含一个整数,表示所求方案数。
由于答案可能很大,所以这里要求输 出答案对取模的结果。
Sample Input
6 3 2
aabaab
aab
Sample Output
7
HINT
Solution
表示
中的
个子串与
相等的方案数(0表示不取
,1表示取)
滚动数组优化空间复杂度.
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define M 205
#define N 1005
#define K 1000000007
using namespace std;
int f[][M][M][],n,m,k;
char a[N],b[M];
inline void init(){
scanf("%d%d%d%s%s",&n,&m,&k,a+,b+);
f[][][][]=;
for(int i=,p,q;i<=n;++i){
p=i&;q=p^;
f[p][][][]=;
for(int j=;j<=m;++j)
for(int l=;l<=k;++l){
f[p][j][l][]=(f[q][j][l][]+f[q][j][l][])%K;
if(a[i]==b[j]) f[p][j][l][]=((f[q][j-][l][]+f[q][j-][l-][])%K+f[q][j-][l-][])%K;
else f[p][j][l][]=;
}
}
printf("%d\n",(f[n&][m][k][]+f[n&][m][k][])%K);
}
int main(){
freopen("str.in","r",stdin);
freopen("str.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}
[vijos1982][NOIP2015]子串的更多相关文章
- NOIP2015子串[序列DP]
题目背景 无 题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重 叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个 ...
- LOJ2424 NOIP2015 子串 【DP】*
LOJ2424 NOIP2015 子串 LINK 题目大意是给你两个序列,在a序列中选出k段不重叠的子串组成b序列,问方案数 首先我们不考虑相邻的两段,把所有相邻段当成一段进行计算 然后设dpi,j, ...
- NOIP2015 子串
#149. [NOIP2015]子串 有两个仅包含小写英文字母的字符串 AA 和 BB. 现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的 ...
- [NOIP2015] 子串(dp)
题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问 ...
- 【uoj149】 NOIP2015—子串
http://uoj.ac/problem/149 (题目链接) 题意 给出两个字符串A.B,问从A中取出k个互不重叠的子串按顺序组成B的方案数. Solution 一看这种题目就是字符串dp,字符串 ...
- [NOIP2015] 子串substring 题解
[题目描述] 有两个仅包含小写英文字母的字符串A和B.现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得 ...
- NOIP2015 子串 (DP+优化)
子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字 ...
- [DP][NOIP2015]子串
子串 题目描述 有两个仅包含小写英文字母的字符串 A 和 B. 现在要从字符串 A 中取出 k 个 互不重叠 的非空子串, 然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的 ...
- Vijos1982 NOIP2015Day2T2 子串 substring 动态规划
子串 (substring.cpp/c/pas) 题目链接 [问题描述]有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重叠 的非空子串,然后把这 k 个子串按照 ...
随机推荐
- .net core API 统一拦截错误
public override void OnActionExecuted(ActionExecutedContext context) { if (context.Exception != null ...
- zabbix_proxy安装[yum mysql5.6]
安装mysql rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 修改mysql配置: [m ...
- android 获取当前系统时间
取得系统时间 1. long time=System.currentTimeMillis(); 2. final Calendar mCalendar=Calendar.getInstance(); ...
- Hadoop: MapReduce2的几个基本示例
1) WordCount 这个就不多说了,满大街都是,网上有几篇对WordCount的详细分析 http://www.sxt.cn/u/235/blog/5809 http://www.cnblogs ...
- Java:注解(元数据)
初识Java注解 所谓的元数据是指用来描述数据的数据,可能刚听到元数据的时候你会有点陌生,其实任何一个使用过struts或者hibernate的开发人员都在不知不觉中使用元数据,更通俗一点来说元数据是 ...
- 各地IT薪资待遇讨论
作为一个搞.net开发的程序员,在北京混了三年半,最近准备辞职到上海找工作.由于对上海的IT行业还不是很了解,在这里想让上海的同行们说下你们的情况,以方便我对自己在上海的定位,当然,其余城市的的同行们 ...
- JS导出Excel 代码笔记
var tableToExcel = (function () { var uri = 'data:application/vnd.ms-excel;base64,', template = '< ...
- jsonp的优缺点
转载:http://www.w3cfuns.com/notes/18271/df9ecd8f0ca5e523ae75745a3996c47c.html JSONP的优缺点 1.优点 ...
- VS2013 未找到与約束ContractName
vs2013打开项目无法加载项目,关闭时提示 未找到与約束ContractName... 解決方法,打開控制面板,找到下面這個程序 右击,选 择 修 复
- 线段树(codevs1082)
type jd=record z,y,lc,rc,sum,toadd:int64; end; var tree:..] of jd; qzh:..] of int64; x:..] of int64; ...