【NOIP2015】子串(字符串DP)
题意:有AB两个字符串,用A中连续的K串匹配B全串,问不同的方案总数
n<=1000,m<=200,k<=m
思路:设dp[k,i,j]为用k串 A中前i个字符匹配B中前j个字符的方案总数
首先dp[k,i,j]=0 (a[i]<>b[j])
然后就是考虑dp[k,i,j]能否从dp[k,i-1,j-1]即前一个连续转移来 dp[k,i,j]=dp[k,i,j]+dp[k,i-1,j-1]
还有就是另起一串 dp[k,i,j]=dp[k-1,1,j-1]+dp[k-1,2,j-1]+...+dp[k-1,i-1,j-1]
转移用前缀和优化,空间用滚动数组优化

暴力
const mo=;
var dp:array[..,..,..]of longint;
a,b:ansistring;
n,m,k1,i,j,k,x,ans:longint; begin
//assign(input,'1.in'); reset(input);
//assign(output,'1.out'); rewrite(output);
readln(n,m,k1);
readln(a);
readln(b);
dp[,,]:=;
for i:= to n do
if a[i]=b[] then dp[,i,]:=;
for i:= to k1 do
for j:= to n do
for k:= to m do
begin
if a[j]<>b[k] then continue;
if a[j-]<>b[k-] then
for x:= to j- do dp[i,j,k]:=(dp[i,j,k]+dp[i-,x,k-]) mod mo
else
begin
for x:= to j- do dp[i,j,k]:=(dp[i,j,k]+dp[i-,x,k-]) mod mo;
dp[i,j,k]:=(dp[i,j,k]+dp[i,j-,k-]) mod mo;
end;
end;
for i:= to n do ans:=(ans+dp[k1,i,m]) mod mo;
writeln(ans);
// close(input);
// close(output);
end.
加了优化
const mo=;
var dp,f:array[..,..,..]of longint;
a,b:ansistring;
n,m,k1,i,v,j,k,ans:longint; begin
//assign(input,'1.in'); reset(input);
//assign(output,'1.out'); rewrite(output);
readln(n,m,k1);
readln(a);
readln(b);
dp[,,]:=;
for i:= to n do f[,i,]:=;
for i:= to k1 do
begin
v:=-v;
fillchar(f[v],sizeof(f[v]),);
fillchar(dp[v],sizeof(dp[v]),);
for j:= to n do
for k:= to m do
begin
if a[j]=b[k] then
begin
dp[v,j,k]:=f[-v,j-,k-];
if a[j-]=b[k-] then dp[v,j,k]:=(dp[v,j,k]+dp[v,j-,k-]) mod mo;
end;
f[v,j,k]:=(f[v,j-,k]+dp[v,j,k]) mod mo;
end;
end;
for i:= to n do ans:=(ans+dp[v,i,m]) mod mo;
writeln(ans);
//close(input);
//close(output);
end.
【NOIP2015】子串(字符串DP)的更多相关文章
- NOIP2015子串[序列DP]
题目背景 无 题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重 叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个 ...
- LOJ2424 NOIP2015 子串 【DP】*
LOJ2424 NOIP2015 子串 LINK 题目大意是给你两个序列,在a序列中选出k段不重叠的子串组成b序列,问方案数 首先我们不考虑相邻的两段,把所有相邻段当成一段进行计算 然后设dpi,j, ...
- NOIP2015Day2T2子串(字符串dp)
又被“if(a=b)”坑了QAQ...写C++还是得开Warning,这么久了pascal还没改过来咋回事啊QWQ 题目大意就不说了OWO 网上的题解都不怎么看得懂啊...好像写得都很乱?还是我太sb ...
- loj2424 「NOIP2015」子串[字符串DP]
给定字符串 A,B,要求从 A 中取出互不重叠的 k 个非空子串,按照出现顺序拼起来后等于 B.求方案数.n ≤ 1000,m ≤ 200. 主要是状态的转移.先设计出$f_{i,j,k}$表长度$B ...
- [NOIP2015] 子串(dp)
题目描述 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问 ...
- NOIP2015 子串 (DP+优化)
子串 (substring.cpp/c/pas) [问题描述] 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个 互不重 叠 的非空子串,然后把这 k 个子串按照其在字 ...
- Luogu P2679 子串(字符串+dp)
P2679 子串 题意 题目描述 有两个仅包含小写英文字母的字符串\(A\)和\(B\). 现在要从字符串\(A\)中取出\(k\)个互不重叠的非空子串,然后把这\(k\)个子串按照其在字符串\(A\ ...
- 【uoj149】 NOIP2015—子串
http://uoj.ac/problem/149 (题目链接) 题意 给出两个字符串A.B,问从A中取出k个互不重叠的子串按顺序组成B的方案数. Solution 一看这种题目就是字符串dp,字符串 ...
- 【BZOJ 2121】 (字符串DP,区间DP)
2121: 字符串游戏 Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,B ...
- AtCoder Regular Contest 081 E - Don't Be a Subsequence(字符串DP)
引用自:onion_cyc 字符串DP一直不是强项...以后没思路的题就想DP和网络流23333333 f[i]表示从i开始的后缀非子序列的最短长度 pos[i][j]表示从i开始的j字符最早出现位 ...
随机推荐
- Bootstrap历练实例:面板的标题
面板标题 我们可以通过以下两种方式来添加面板标题: 使用 .panel-heading class 可以很简单地向面板添加标题容器.to easily add a heading container ...
- vs 2012打开vs2013的sln
Project -> Properties -> General -> Platform Toolset (as IInspectable correctly commented)
- 洛谷 P1147 连续自然数和
洛谷 P1147 连续自然数和 看到dalao们的各种高深方法,本蒟蒻一个都没看懂... 于是,我来发一篇蒟蒻友好型的简单题解 #include<bits/stdc++.h> using ...
- JWT (JSON WEB Token)正确使用场景
https://www.jianshu.com/p/af8360b83a9f 讲真,别再使用JWT了! ThoughtWorks中国 2017.08.16 08:51* 字数 2882 阅读 7154 ...
- linux常用命令(配置查看,定时任务)
1.查看所有待挂载设备信息 fdisk -l # fdisk -l Disk /dev/sda: bytes heads, sectors/track, cylinders, total sector ...
- Boostrap的自适应功能
其实理解栅栏模式之后,自适应功能就简单很多了,根据浏览器的大小,Boostrap有四种栅栏类名提供使用,用法与Css样式表类名选择器样式调用是一样的: xs:col-xs-1 ~ col-xs-12, ...
- 【js】window.onscroll 无效问题
body 设置为height:100% 导致window.onscroll 无效
- python-闭包函数和装饰器
目录 闭包函数 什么是闭包? 两种为函数传参的方式 使用参数的形式 包给函数 闭包函数的应用 闭包的意义: 装饰器 无参装饰器 什么是装饰器 为什么要用装饰器 怎么用装饰器 完善装饰器 闭包函数 什么 ...
- rs485多主
因复位时I/O口都输出高电平.如果把I/O口直接与RS-485接口芯片的驱动器使能端DE端相连,会在CPU复位其间DE为高,从而使本节点处于发送状态.如果此时总线上其它节点在发送数据,则此次数据传输将 ...
- Python虚拟机函数机制之参数类别(三)
参数类别 我们在Python虚拟机函数机制之无参调用(一)和Python虚拟机函数机制之名字空间(二)这两个章节中,分别PyFunctionObject对象和函数执行时的名字空间.本章,我们来剖析一下 ...