[LUOGU] P2679 子串
一开始用一个f数组转移,发现不太对,状态有重叠部分
f[i][j][k]表示考虑了s的前i位,匹配到t的第j位,用了k个子串,且s的第i位必选
g[i][j][k]表示考虑了s的前i位,匹配到t的第j位,用了k个子串,且s的第i位必不选
考虑i的前一位:前一位选(作为结尾),前一位选(不作为结尾),前一位不选
f[i][j][k]=f[i-1][j-1][k]+f[i-1][j-1][k-1]+g[i-1][j-1][k-1]
第i位不选时继承状态
g[i][j][k]=g[i-1][j][k]+f[i-1][j][k]
滚动数组省一维
#include<iostream>
#include<cstring>
#include<cstdio>
#define int long long
using namespace std; inline int rd(){
int ret=,f=;char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} const int MAXN=;
const int MOD=;
int n,m,num; char s[MAXN],t[MAXN];
int f[][MAXN][MAXN],g[][MAXN][MAXN]; signed main(){
n=rd();m=rd();num=rd();
scanf("%s%s",s+,t+);
s[]='a';t[]='b';
g[][][]=;
for(int i=;i<=n;i++){
g[i&][][]=;
for(int j=;j<=m&&j<=i;j++){
for(int k=;k<=num;k++){
f[i&][j][k]=g[i&][j][k]=;
g[i&][j][k]=(g[(i-)&][j][k]+f[(i-)&][j][k])%MOD;
if(s[i]==t[j]){
f[i&][j][k]=(f[(i-)&][j-][k-]+f[(i-)&][j-][k]+g[(i-)&][j-][k-])%MOD;
}else{
f[i&][j][k]=;
}
}
}
}
cout<<(f[n&][m][num]+g[n&][m][num])%MOD;
return ;
}
[LUOGU] P2679 子串的更多相关文章
- Luogu P2679 子串(字符串+dp)
P2679 子串 题意 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\ ...
- 洛谷 P2679 子串 解题报告
P2679 子串 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\)中出 ...
- P2679 子串 DP
P2679 子串 DP 从字符串A中取出\(k\)段子串,按原顺序拼接,问存在多少个方案使拼接的字符串与字符串B相同 淦,又是这种字符串dp 设状态\(ans[i][j][k]\)表示A串位置\(i\ ...
- 【Luogu】P2679子串(DP)
题目链接 GuessYCB的题解讲的很棒.就这样. 因为这题我不会,而题解又讲的太全太详细太好了. #include<cstdio> #include<cctype> #inc ...
- P2679 子串
http://www.luogu.org/problem/show?pid=2679 题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后 ...
- Luogu 2679 子串 (动态规划)
Luogu 2679 NOIP 2015 子串 (动态规划) Description 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k ...
- 洛谷P2679 子串——DP
题目:https://www.luogu.org/problemnew/show/P2679 DP水题: 然而被摆了一道,下面加 // 的地方都是一开始没写好的地方...还是不周密: 仔细审题啊... ...
- [NOIP2015] 提高组 洛谷P2679 子串
题目背景 无 题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新 ...
- luogu 2679 子串
子串 史上最简短的一篇博客,毕竟看题解ac心疼我的kmp /* f[i][j][k][0/1]表示A的前i个,B的前j个,用到了k个子串,当前字符选或者不选. 所以f[0][0][0][0]的方案数为 ...
随机推荐
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- hibernate错误总结2
- D - Fliptile
#include <stdio.h> #include <iostream> #include <math.h> #include <algorithm> ...
- JQuery | trigger() 方法
trigger() 方法触发被选元素的指定事件类型. 语法格式: trigger(type,[data]) type:触发事件类型 [data]:可选项,表示在触发事件时传递给函数的附加参数. 实例: ...
- Java | 基础归纳 | JPA
https://www.javacodegeeks.com/2015/04/jpa%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B.html JPA 全称====>Jav ...
- C# 面向对象之继承
Object是所有类的基类 1.在C#中一个类可以继承另一个类(密封类除外,静态类是密封的不能被继承); 2.被继承的类被成为基类(父类);继承的类被成为派生类(子类); 3.子类将获得父类除构造函数 ...
- AtCoder Regular Contest 078 D
D - Fennec VS. Snuke Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement F ...
- WebView使用遇到的坑
1.为了防止内存泄漏,关闭界面的时候一定要记得 webView.distroy() 并且把webView置为null 2.尽量不要在代码中new控件 尽量不要在代码中new控件 尽量不要在代码中n ...
- 求N之下的所有素数
No.1 f=lambda n: [x for x in range(1,n) if not [y for y in range(2,x) if x%y ==0 ]] No.2 def prime(n ...
- centos7安装iptables
使用CentOS 7时发现使用iptables防火墙时提示错误Unit iptables.service failed to load,意思是防火墙运行启动失败了,那么要如何处理呢. 一直用Cen ...