NOIP 2015 子串 DP

题解:AcWing 6051 看病 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。但医院的排队不同其他排队,因为多数情况下,需要病情严重的人优先看病,所以希望BSNY设计系统时,以病情的严重情况作为优先级,判断接下来谁可以去看病。具体是这样的,最近来医院看病的人越来越多了,因此很多人要排队,只有当空闲时放一批病人看病。的操作,输出此时还在排队人中,优先级最大的患者姓名和优先级。后面没有输入,但需要你输出。 阅读详情

这里写图片描述
n<=1000,m<=200,k<=m


今天是写这道题第2遍了…然而上次我还给别人讲了这道题的做法…现在就不会做了QAQ…


我们定义f[s][i][j]为使用了A串的前i个字符组成了s个非空子串匹配了B串的前j个字符的方案数…
我们可以很轻易的得出dp转移方程
f[s][i][j]+=f[s][i-1][j]+f[s-1][i-1][j-1] (a[i]==b[j])+f[s][i-1][j-1] (a[i]==b[j])
但是考虑这个转移方程会有重复的地方:
f[s][i-1][j]包含f[s-1][i-2][j-1],f[s-1][i-1][j-1]同样也包含f[s-1][i-2][j-1]…
所以f[s-1][i-2][j-1]被加了两次…所以我么就要减去一个f[s-1][i-2][j-1]…所以我们就不能滚i这一维只能滚s这一维了…


代码如下:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define int long long
using namespace std;
const int maxa=1000+5,maxb=200+5,p=1000000007;
int n,m,k,f[2][maxa][maxb],tmp;
char a[maxa],b[maxb];
inline int read(){
    char ch=getchar();
    int f=1,x=0;
    while(!(ch>='0'&&ch<='9')){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
        x=x*10+ch-'0',ch=getchar();
    return f*x;
}
signed main(void){
    n=read(),m=read(),k=read(),tmp=0;
    scanf("%s%s",a+1,b+1);
    for(int i=0;i<=n;i++)
        f[0][i][0]=1;
    for(int s=1;s<=k;s++){
        tmp=(tmp+1)%2;
        for(int i=0;i<=n;i++)
            f[tmp][i][s-1]=0;//因为我们选择了s个非空字串进行匹配,所以b中s-1个字符进行匹配的方案数当然是0 
        for(int j=s;j<=m;j++)
            for(int i=j;i<=n;i++){
                if(a[i]!=b[j])
                    f[tmp][i][j]=f[tmp][i-1][j];
                else{
                    f[tmp][i][j]=((f[(tmp+1)%2][i-1][j-1]+f[tmp][i-1][j])%p+f[tmp][i-1][j-1])%p;
                    if(i>=2)
                        f[tmp][i][j]=(f[tmp][i][j]-f[tmp][i-2][j-1]+p)%p;
                }
            }
    }
    cout<<f[tmp][n][m]<<endl;
    return 0;
}

by >_< NeighThorn

关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本 如何将它翻译成matlab可以使用的矩阵变量,并参与运算。 由于这个大型刚度矩阵125万x125万≈1e12。matlab甚至其他计算软件无法保存这个大的一个矩阵文件。而这个刚度矩阵作为稀疏矩阵其中非零元素的数目只有有500多万。采用sparse稀疏矩阵技术是可以保存。 这里简单介绍一下这个Hypemesh导出的大型刚度矩阵txt文本。如图DMIG开头的标识符是换行符,后面两列是表示这条非零元素在刚度矩阵中列数的信息。我们已经将左边字母和符号等批量删除,得到了右边textread函数可以... 阅读详情

相关推荐

FeynRules的上手使用3--运行

FeynRules的运行 接上两篇,在我们正确的设定模型参数和拉氏量之后,就可以运行FeynRules来推导费曼规则。 装载文件 首先需要设定FeynRules文件所在位置,并装载FeynRules模块: $FeynRulesPath = SetDirectory[ ] << FeynRules` 接下来是装载写好的模型文件: LoadModel[ < file.fr >, < file2.fr >, … ] 模型文件后缀为".fr",可以分几块构成。模型描述可以写在

cool_bot的博客 1074

2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest Problem J 【二分+DP+单调队列】

题目链接 题意 有n个地铁站,全部成线性排列,有n-1种地铁票,第i种地铁票的价格为p_i,并且能坐i站(也就是在第k个站能够到达[k-i,k+i]中的站)。现在想从起点站坐到终点站,地铁在相邻两个站之间运行花费1s(这里原文是“get from a stop to the next one in just one minute.”有歧义,坑了好久),给出在每个站...

babao9492的博客 279

Bellhop水声信道模型的仿真

Bellhop是一种基于射线追踪的水声信道模型,广泛用于预测水下环境中的声压场。它通过模拟声波在水中的传播路径,计算声场分布,适用于复杂的水下通信场景。

yt94832的博客 1308

[省选] [DP] [HLOI2015] Color

HLOI2015T2

HeRaNO@HSAHRBNU 830

【UE4】PMC程序化生成戈德堡多面体详解(六边形星球)

游戏实机录屏 【魔方超新星】30天独立开发PCG Minigame《盖亚计划》作品展示,尚有不足,大佬轻喷 目录 游戏实机录屏 一、简介 二、设计思路 2.1 Disco Ball 2.2 Fibonacci Sphere 2.3 Goldberg Polyhedron 2.3.1 细分+对偶(最终方案) 2.3.2 对偶+截角(更优) 三、参考文献 一、简介 在制作Minigame初期,游戏风格想模仿《文明6》与《Polygonal Planet Proje...

ColorGalaxy 5928

核密度估计及其Python实践

一、参数估计简介 很多情况下,我们只有有限的样本集,而类条件概率密度函数p(x|ωi)和先验概率P(ωi)是未知的,需要根据已有样本进行参数估计,然后将估计值当作真实值来使用。 由给定样本集求解随机变量的分布密度函数问题是统计机器学习和概率统计学的基本问题之一。解决该问题的方法包括参数估计和非参数估计两大类: 1.参数估计方法 已知概率密度函数的形式而函数的有关参数未知,通过估计参数来估计概率密度函数的方法。有两种主要参数估计法:确定性参数估计方法是把参数看作确定而未知的, 典型方法为最大似然估计。随机参数

袁易学的博客(Yuan Yixue's Blog) 1万+

【2015-2016 XVI Open CupJ】【DP bitset记录方案】Judgement n人投票前后权威值改变是否有实际区别

J. Judgement time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The jury of Berland regional olympiad in infor

snowy_smile的博客 1023

fastbin attack快速入门

0x01 fastbin简介 Fastbin包含0x20~0x80大小bin的数组指针,用于快速分配小堆块。fastbin按照单链表结构进行组织,相同大小的bin在同一个链表中,fd指向下一个bin,采用LIFO(Last In First Out)机制。在fastbin中,堆块的inuse标志都为1,处于占用状态,防止chunk释放时进行合并,加快小堆块的分配。 正常fastbin的使用 通过这个简单的案例来了解fastbin的单链表结构,malloc和free的过程。 #include<stdio

abelxu 1571

NOIP 2015 子串 (DP)

Description有两个仅包含小写英文字母的字符串 A 和 B。现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?(子串取出的位置不同也认为是不同的方案)Solution显然DP, dp[i][j][k][0/1]dp[i][j][k][0/1]表示当前

დ♂Hany01's Blog Space♂ღ 344

AS7341可见光谱传感器原理图设计,已量产(光线传感器)

最近在做便携式环境光光谱检测项目时,我们基于 ams 的 AS7341 搭了一套硬件电路 —— 这颗芯片算是业内新一代的光谱传感 IC,8 个可见光通道 + NIR + 闪烁检测的配置,加上 6 路并行 16 位 ADC,数据吞吐能力确实够顶。今天就拆解下这个模块的硬件设计细节,聊聊实际做板时的那些考量点。

不脱发的程序猿 639

ISMN数据处理

可批量下载,十分方便

m0_46268055的博客 1214

hdu4908 中位数子串

题意:       给你N个数字组成的数列,然后问你这里面有多少个是以M为中位数的子序列。 思路:       首先分四中简单的情况求        (1) 就是只有他自己的那种情况 那么sum+1        (2) 从自己开始向左延伸,x, x - 1, x - 2 ...这种可以记录大于m的个数max和小于m的个数min当两个数相等的时候(min == max)就 s

天使也掉毛 633

【华为OD技术面试真题 - 技术面】- C++面试题(1)

2024华为OD面试手撕代码真题目录以及八股文真题目录

算法大师! 3398

LOJ2424 NOIP2015 子串 【DP】*

LOJ2424 NOIP2015 子串 LINK 题目大意是给你两个序列,在a序列中选出k段不重叠的子串组成b序列,问方案数 首先我们不考虑相邻的两段,把所有相邻段当成一段进行计算 然后设dpi,j,k,0/1dpi,j,k,0/1dp_{i,j,k,0/1}表示a使用了i为,b匹配到j位,一共有k段,当前这一位选不选的方案数 然后转移显然: dpi,j,k,0=dpi−1,...

Dream_maker的博客 276

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【noip2015】【DP】子串

子串 描述 有两个仅包含小写英文字母的字符串 A 和 B。现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出的位置不同也认为是不同的方案。 格式 输入格式 第一行是三个正整数 n,m,k,分别表示

anantheparty的博客 451

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

[NOIP2015 提高组] 子串(线性dp)

(看图可知)所以我们合并一下: g[ i ][ j ][ k ] = f[ i-1 ][ j-1 ][ k-1 ] + g[ i-1 ][ j-1 ][ k ];第一眼看到这题的时候,想到的DP式子是这样的:f[ i ][ j ][ k ] = f[ i-1 ][ j-1 ][ k ] + f[ i-1 ][ j-1 ][ k-1 ];( A[i] == B[j] )合并一下: f[ i ][ j ][ k ] = f[ i-1 ][ j ][ k ] + s[ i ][ j ][ k ];

m0_60738889的博客 1158

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

滚动数组优化 洛谷P2679 [NOIP2015]子串【DP】

洛谷P2679 [NOIP2015]子串【DP】 这里用了两种思路实现,第一种就是普通的递归方法,但由于时间复杂度比较高,所以无法过oj。 第二种实现思路是dp,作为菜鸟的我还是看了别人的教程后自己才能写出来,这里用到了滚动数组优化空间的方式,具体的思路在下面的代码注释中。 #include <iostream> #include "string" #include "map" u...

zyymmm96128的博客 240

【uoj#149】【NOIP2015】子串 DP

uoj复制好像能放大的都复制两遍…直接丢链接吧:#149. 【NOIP2015】子串题意是说给你一个a串一个b串,从a串中挑出k个互不重叠的子串按顺序连接使得得到的串和b串一样…OI生涯中直到现在最惨痛的经历,除了运输计划没有之一…这题我以为string慢,把30分骗分给我卡到10分…不想说什么了……说正解。设dp[i][j][k][0/1]dp[i][j][k][0/1]表示a串匹配到第i个字符,

DQS的树洞 773

NOIP2015 子串【DP】【NOIP】

Description有两个仅包含小写英文字母的字符串 AA 和 BB。现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串 BB 相等?注意:子串取出的位置不同也认为是不同的方案。题解DP。首先有一个想法,定义f[i][j][k]f[i][j][k]表示A串处理到第

Sdywolf的博客 367

洛谷 2676 [NOIP2015] 子串 DP

个人感觉此题是NOIP2015最难的一道

Loi_cgold 351

code vs 4560 NOIP2015 D2T2 子串 (dp)

4560 NOIP2015 D2T2 子串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果 题目描述 Description 有两个仅包含小写英文字母的字符串A和B。现在要从字符串A中取出k个互不重叠的非空子

clover_hxy的博客 409

P2679 [NOIP2015 提高组] 子串题解__朴素DP

我们发现, 对于任意状态下的转移方程, 当前行状态只与上一行有关, 可以使用滚动数组压缩空间 (用。中出现的顺序依次连接起来得到一个新的字符串。所有合法方案如下:(加下划线的部分表示取出的字串)注意:子串取出的位置不同也认为是不同的方案。很明显, 这是一道朴素DP(很正常的DP), 说明该位可以成为被选择子串中的一个字符。有两个仅包含小写英文字母的字符串。个互不重叠的非空子串,然后把这。的长度,以及问题描述中所提到的。一个整数,表示所求方案数。的字符串,表示字符串。的字符串,表示字符串。

Radon.S的家 1317

[NOIP2015][DP]子串

【问题描述】有两个仅包含小写英文字母的字符串A和B。 现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串, 请问有多少种方案可以使得这个新串与字符串B相等?注意:子串取出的位置不同也认为是不同的方案。 【输入格式】第一行是三个正整数n,m,k,...

weixin_30950607的博客 81

NOIP2015子串[序列DP]

题目背景 无  题目描述 有两个仅包含小写英文字母的字符串 A 和 B。现在要从字符串 A 中取出 k 个互不重 叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问有多少种方案可以使得这个新串与字符串 B 相等?注意:子串取出 的位置不同也认为是不同的方案。 输入输出格式 输入格式:  输入文件名为 substring.in。 ...

weixin_34364071的博客 192

UOJ149【NOIP2015】子串 (DP)

bzoj2730 [HNOI2012]矿场搭建原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=2730题意: 有两个仅包含小写英文字母的字符串 A 和 B。现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串 B 相

Bfk的博客 317

NOIP2015 子串 DP

f[i][j][k][0]表示a串匹配到第i个字符 b串匹配到第j个字符 当前已经取了k串 a[i]不和b[j]匹配 f[i][j][k][1]```````````````````````````````````````````````````````````````````````````````````a[i]和b[j]匹配 分以下情况: 1、A[i]!=B[j]:f[i-1][j][

Weeendy's 412
上一篇: BZOJ 1098: [POI2007]办公楼biu 并查集优化bfs找反图联通块
下一篇: POJ 3694 Network 割边
NeighThorn
博客等级 码龄11年 20粉丝 171原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值