Vijos1982 NOIP2015Day2T2 子串 substring 动态规划
子串 (substring.cpp/c/pas) 题目链接
【问题描述】
有两个仅包含小写英文字母的字符串 A 和 B。现在要从字符串 A 中取出 k 个 互不重叠 的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一
个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出的位置不同也认为是不同的方案 。
【输入格式】
输入文件名为 substring.in。
第一行是三个正整数 n,m,k,分别表示字符串 A 的长度,字符串 B 的长度,以及问题描述中所提到的 k,每两个整数之间用一个空格隔开。
第二行包含一个长度为 n 的字符串,表示字符串 A。
第三行包含一个长度为 m 的字符串,表示字符串 B。
【输出格式】
输出文件名为 substring.out。
输出共一行,包含一个整数,表示所求方案数。 由于答案可能很大,所以这里要求对输出答案对 1,000,000,007 取模 的结果。
【输入输出样例 1】
substring.in
6 3 1
aabaab
aab
substring.out
2
【输入输出样例 2】
substring.in
6 3 2
aabaab
aab
substring.out
7
【输入输出样例 3】
substring.in
6 3 3
aabaab
aab
substring.out
7
【题解】
NOIP2015Day2T2
一道好好的DP题
我们用dp[i][j][k]表示在B串中匹配i个,在A串中匹配到的位置为j,共使用k个子串的方案总数,则dp[i][j][k]=Σdp[i-1][j'][k-1] +dp[i-1][j-1][k]
那么,对于Σ可以用前缀和优化,这样的时间就可以卡进去了,但是空间还是要炸,所以我们采用滚动数组来优化空间即可。详见代码。
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+,M=+;
const int mod=1e9+;
char s1[N],s2[M];
int n,m,K;
int dp[][N][M],sum[][N][M];
//dp[i][j][k]=Σdp[i-1][j'][k-1](1<=j'<=j-1) +dp[i-1][j-1][k]
int main(){
scanf("%d%d%d%s%s",&n,&m,&K,s1+,s2+);
memset(dp,,sizeof dp);
memset(sum,,sizeof sum);
int I=,J=;
for (int i=;i<=n;i++){
if (s2[]==s1[i])
dp[][i][]=;
sum[][i][]=sum[][i-][]+dp[][i][];
}
for (int i=;i<=m;i++,I^=,J^=){
memset(dp[J],,sizeof dp[J]);
memset(sum[J],,sizeof sum[J]);
for (int j=;j<=n;j++){
if (s2[i]!=s1[j])
continue;
for (int k=;k<=K;k++)
if (j>=)
dp[J][j][k]=(sum[I][j-][k-]+dp[I][j-][k])%mod;
else
dp[J][j][k]=dp[I][j-][k];
}
for (int k=;k<=K;k++)
for (int j=;j<=n;j++)
sum[J][j][k]=(sum[J][j-][k]+dp[J][j][k])%mod;
}
printf("%d",sum[I][n][K]);
return ;
}
Vijos1982 NOIP2015Day2T2 子串 substring 动态规划的更多相关文章
- Luogu 2679 子串 (动态规划)
Luogu 2679 NOIP 2015 子串 (动态规划) Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k ...
- [LeetCode] 647. 回文子串 ☆☆☆(最长子串、动态规划、中心扩展算法)
描述 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "abc" ...
- 【LeetCode】最长回文子串【动态规划或中心扩展】
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: "bab"注意: " ...
- [LeetCode] 5. 最长回文子串 ☆☆☆(最长子串、动态规划)
最长回文子串 (动态规划法.中心扩展算法) https://leetcode-cn.com/problems/longest-palindromic-substring/solution/xiang- ...
- [vijos1982][NOIP2015]子串
Description 有两个仅包含小写英文字母的字符串和.现在要从字符串中取出个互不重叠的非空子串,然后把这个子串按照其在字符串中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得这 ...
- [NOIP2015] 子串substring 题解
[题目描述] 有两个仅包含小写英文字母的字符串A和B.现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得 ...
- 【NOIP2015】子串(动态规划)
题目戳我 题解 很简单的一道题... 看来那时候还是我太菜了... 设f[i][j][k][0/1]表示在第一个串中的位置i,匹配到了位置j,一共分了k段,0/1表示上一个位置是否在某一段中 转移就很 ...
- NOIP2015Day2T2子串(字符串dp)
又被“if(a=b)”坑了QAQ...写C++还是得开Warning,这么久了pascal还没改过来咋回事啊QWQ 题目大意就不说了OWO 网上的题解都不怎么看得懂啊...好像写得都很乱?还是我太sb ...
- 领扣-5 最长回文子串 Longest Palindromic Substring MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
随机推荐
- 模块 -- 序列化 hashlib sha logging (加密 加盐 )
模块: 一个py文件就是一个模块 模块分类: 1:内置模块,登录模块,时间模块,sys模块,os模块等等 2: 扩展模块, 3:自定义模块,自己写的py文件 python 开发效率之高:python ...
- Ex 2_27 矩阵A的平方是A自乘后的乘积,即AA..._第三次作业
- Spring动态数据源实现读写分离
一.创建基于ThreadLocal的动态数据源容器,保证数据源的线程安全性 package com.bounter.mybatis.extension; /** * 基于ThreadLocal实现的动 ...
- 29)django-ORM连表结构
连表结构 一对多:models.ForeignKey(其他表) 多对多:models.ManyToManyField(其他表) 一对一:models.OneToOneField(其他表) 应用场景: ...
- css之坑
1.background-size要放在background后边才会生效. 2.隐藏滚动条,内容可以滑动 body::-webkit-scrollbar { display: none /* 隐藏滚动 ...
- idea Unable to open debugger port (127.0.0.1:58006) Address already in use: JVM_Bind 的解决办法
报错说端口58006 被占用了,于是去修改端口 重新dubug 发现换个端口号还是不行,同样的错误.有时候你把idea关闭重新打开依旧不起作用.最暴力的办法就是重启电脑... 问题解决: 查看使用中的 ...
- spring jdbctemplate调用存储过程,返回list对象
注:本文来源于< spring jdbctemplate调用存储过程,返回list对象 > spring jdbctemplate调用存储过程,返回list对象 方法: /** * 调用 ...
- selenium 获取input输入框中的值的方法
方法一:获取input的文本值 <input class="form-text-normal" id="txtName" name="Name& ...
- js中return false,return,return true的用法及差别
起首return作为返回关键字,他有以下两种返回体式格式 1.返回把握与函数成果 语法为:return 表达式; 语句停止函数履行,返回调用函数,并且把表达式的值作为函数的成果 2.返回把握无函数成果 ...
- linux更好看的top界面htop
top命令界面 性能测试时会经常用到top命令百用百顺就是样式不太美,下面介绍htop一个看起来更漂亮的top界面 安装htop yum install htop 安装完成键入htop命令,这样看起来 ...