【Noip 2015】 子串 解题报告

题解:洛谷 P2679 [NOIP 2015 提高组] 子串 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。中出现的顺序依次连接起来得到一个新的字符串。注意:子串取出的位置不同也认为是不同的方案。有两个仅包含小写英文字母的字符串。个互不重叠的非空子串,然后把这。的长度,以及问题描述中所提到的。,每两个整数之间用一个空格隔开。#普及+# #线性DP-一维#一个整数,表示所求方案数。的字符串,表示字符串。的字符串,表示字符串。 阅读详情

今天没有模拟赛,便心血来潮,想练练DP,然后就选了这道Noip 2015 Day2 T2,倒腾了3h。
这道题我开始想的做法太离谱了,结果搞了半天连样例都没过,没办法无奈看题解了,又由于对这道题理解不是很透彻,导致我看了半天题解也没看懂,后来静下心来看了半个小时终于恍然大悟。
正解应该是O(knm)的做法,最外层for循环枚举k表示用多少个子串,再枚举B子串的长度,最里层枚举A子串的长度。
f[k][i][j] 从A串前i个取k个子串,能组成B子串前j个的总方案数

f[k][i][j]={①f[k][i−1][j]+②f[k−1][i−1][j−1]+f[k][i−1][j−1]−f[k][i−2][j−1]f[k][i−1][j](a[i]==b[j])(a[i]!=b[j])}

分两部分计算:
①f[k][i−1][j] 是用A的前i−1个组成B的前j个,不论a[i]是否等于b[j]都与其无关,所以必须转移.
②当a[i]==b[j] 的时候我们就不仅仅要转移f[k][i−1][j] 了,还需要转移用A前i−1个里的k−1个子串组成B的前j−1个和用A前i−1 个里的k个子串组成B的前j−1 个这两种情况,第一种情况比较简单就不多说了,第二种情况是如果a[i−1] 和b[j−1] 也相等的话,就可以把用A前i−1个里的k个子串组成B前j−1个字符且a[i−1]==b[j−1] 这种情况和a[i]==b[j] 合并一下(语文不好,没有什么辞藻了..),但是不能直接加f[k][i−1][j−1],因为f[k][i−1][j−1] 不仅仅代表着a[i−1]==b[j−1] 的方案数,毕竟我们在算f[k][i−1][j−1] 的时候也是由①②部分转移的,所以我们要减去①部分f[k][i−2][j−1],最后得到的就是f[k][i][j] 了.

代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
#define MOD 1000000007
using namespace std;
typedef long long LL;
int s[2][1005][205],n,la,lb,i,j,k,u;
char a[1005],b[205]; 
int read()
{
    int x=0;char c=getchar();
    while(c<48||c>57) c=getchar();
    while(c>=48&&c<=57) x=x*10+c-48,c=getchar();
    return x;
}
void char_read(char x[])
{
    int t=0;
    char c=getchar();
    while(c<'a'||c>'z') c=getchar();
    while(c>='a'&&c<='z') x[++t]=c,c=getchar();
}
int main()
{
    la=read();lb=read();n=read();//读入
    char_read(a);
    char_read(b);
    for(i=0;i<=la;i++)
      s[0][i][0]=1;
    for(k=1;k<=n;k++)//代码主体
    {
      u=k%2;
      for(i=0;i<=la;i++)
      s[u][i][k-1]=0;//不要漏了把滚动数组清零!!防止在j=k时的第一次循环把s[u-2][i-1][j-1]加进去
      for(j=k;j<=lb;j++)
      {
        for(i=j;i<=la;i++)
        {
            s[u][i][j]=s[u][i-1][j];
            if(a[i]==b[j])
            {
                s[u][i][j]=(s[u^1][i-1][j-1]+s[u][i][j])%MOD;
                s[u][i][j]=(s[u][i][j]+s[u][i-1][j-1])%MOD;
                if(i>=2) s[u][i][j]=(s[u][i][j]-s[u][i-2][j-1]+MOD)%MOD;
            }
        }
      } 
    }
    printf("%d\n",s[n%2][la][lb]%MOD);
    return 0;
} 

黑客渗透测试后门隐藏技术揭秘 本文介绍了在授权渗透测试中隐藏后门文件(muma.exe)的多种技术手段。主要包括:通过WinRAR自解压脚本将后门与正常程序捆绑实现双开;利用系统自动运行目录和注册表实现开机自启;修改文件图标伪装成常用软件;将文件存放在冷门系统目录;设置系统+隐藏双重属性增强隐蔽性。此外还涉及对抗安全软件的加壳(UPX)、免杀(msfvenom编码)技术,以及进程注入、日志清除等运行隐藏方法。所有技术仅限合法授权测试使用,未经授权使用将面临法律责任。 阅读详情

相关推荐

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

5G MBS(组播广播服务)深度解析:从标准架构到商用实践

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1084

9.11NOIP模拟赛

Passward(passward.cpp) 你来到了一个庙前,庙牌上有一个仅包含小写字母的字符串 s。 传说打开庙门的密码是这个字符串的一个子串 t,并且 t 既是 s 的前缀又是 s 的后缀并且还在 s 的中间位置出现过一次。 如果存在这样的串,请你输出这个串,如有多个满足条件的串,输出最长的那一个。 如果不存在这样的串,输出”Just a legend”(去掉引号)。 输入格式:

KGV093的博客 427

在mdk文件移植太多_XCubeClassB代码 的移植

前言ST在www.st.com官网上提供了针对IEC60730/IEC60335 ClassB认证的软件包。软件包分为三个,分别适用STM8,STM32(基于标准外设库)和STM32(基于HAL库):STM8-SafeCLASSB,STM32-CLASSB-SPL,X-CUBE-CLASSB。本文以X-CUBE-CLASSB为例介绍如何做代码的移植以及经常遇到的问题的解决办法。X-CUB...

weixin_28898707的博客 1832

noip2015 子串(心得体会)

今天终于又在联赛提高组中遇到动态规划(Dynamic program)了,~~(><) ~~ ,在各种算法中,稍微掌握得好一点的一块。O(∩∩)O~。侥幸在四人组中拿到头魁,(李兄的强项在AVL树, 红黑树 ,线段树,伸展树, 跳跃表,单调队列,最近公共祖先,倍增,后缀自动机,ac自动机等等高端的应用上,简单动态规划有些薄弱,【但是树形dp,状压dp又超级强,看不懂他】今天勉强打败他,在此分享李兄的

chenyiyun666的博客 425

基于JavaFX的Http Server模拟器

源码地址 GitHub - DayRain/http-server-simulator: http server 模拟器 功能描述 HttpServer模拟器,通过简单的配置即可模拟第三方服务端,用于接收和响应HTTP请求。 支持同时模拟多个服务、动态添加接口、动态配置返回值。 使用说明 运行 exe运行 编译代码后,点击exe直接运行 代码运行 下载好代码后,运行主类ApplicationStarter即可 新建服务 主界面如下 点击 文件-新建 创建新的服务 ...

小楼夜听雨的博客 2535

EEG | CHB-MIT癫痫数据集CNN分类实战(一)

CHB-MIT癫痫数据集CNN分类实战

Always learn from the best. 1万+

[NOIP2015 提高组] 子串

将本题状态定义dp[i][j][k]:A串前i个位置取字符,取出来k个字串,组合得到的新串正好与B串前j个位置相等的方案数。中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串。所有合法方案如下:(加下划线的部分表示取出的字串)注意:子串取出的位置不同也认为是不同的方案。有两个仅包含小写英文字母的字符串。个互不重叠的非空子串,然后把这。的长度,以及问题描述中所提到的。,每两个整数之间用一个空格隔开。一个整数,表示所求方案数。的字符串,表示字符串。的字符串,表示字符串。

m0_70897036的博客 1117

用Docker-Compose三节点部署生产级Doris集群:从配置文件到故障转移

本文详细介绍了如何使用Docker-Compose部署一个生产级的三节点Apache Doris集群。内容涵盖从核心架构理解、配置文件编写到集群初始化验证的全过程,并重点讲解了如何实现高可用、数据持久化、健康检查以及故障转移等生产级运维关键点,为中小团队提供了一种在容器化便利性与系统稳定性间取得平衡的可靠部署方案。

kkk56的博客 857

【NOIP2015】子串

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

INCINCIBLE的博客 1843

matlab相机标定_实战 | 相机标定

点击“计算机视觉life”关注,置顶更快接收消息!本文阅读时间约5分钟什么是相机标定?我们为什么需要相机标定?相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系统后续工作的准确性。坐标系相机标定涉及到了四大坐标系,分别为:像素坐标系图像物理坐标系相机坐标系世界坐标系为了进行相机标定,必须已知世界坐标系中足够多的三维空间点坐标,找到这些空间点在图像中投影点的二维图像坐标,并建...

weixin_39747334的博客 765

SI好文翻译:铜箔表面纹理对损耗的影响:一个有效的模型(一)

Paul G. Huray发表在DesignCon2010的提出铜箔表面雪球模型的论文。第一部分说明之前的铜箔表面模型只适用于5GHz以内,超过5GHz后就不再准确。

小孟同学的博客 2174

NOIP2015 子串

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

weixin_30443731的博客 184

uniapp(全端兼容) - 最新详细实现双色球开奖走势图功能组件,uni-app红球走势图/蓝球走势图,解决双色球 “蓝球连线“ 问题,双色球效果及用线连接每个号码详细教程(同样适用于彩票开奖走势图

uni-app,双色球,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,红球走势,蓝球走势,连线,uniapp(vue):js实现双色球开奖走势图带连线,vue2,vue3,uniApp双色球组件插件,uniapp如何实现双色球走势图和连线,彩票走势图,前端 Vue实现彩票走势图,详细示例,走势图,彩票项目,绘制股票走势图,前端 JS实现彩票开奖走势图 连线,Uniapp有没有双色球的页面代码,红球蓝球的走势图如何做,双色球红球和值尾走势图,

✅ 精选推荐文章 3346

解题报告 NOIP2015 子串

这是一道dp题,然后来想想怎么表示状态,对答案有影响的就是A串的第i个字符,B串的第j个字符,和k个子串,简单来说就是和选取的字符和子串的数量有关. 那么设 f[i][j][kk]表示在A串的前i个字符中选kk个子串匹配B串的前j个字符的方案数.求方案数可以采用加法原理,考虑A串的第i个字符,那么这个字符的决策只有取或不取,很明显,加法原理,把不取的方案数和取的方案数加起来就可以,但是状态的定义并

晓峰信息技术教学工作室 370

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LuoguP2679[NOIP2015] 子串 解题报告【多维DP】

Luogu P2679

中国计算机学会成都七中(高新校区)委员会委员活动室 317

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NOIP2015 子串 解题报告(DP)

在线评测: http://codevs.cn/problem/4560/ 整体思路: dp i,j,k,(0/1) 表示A扫到第i位,B扫到第j位,还可以分成k个子串,当前 这一位加不加入子串; 这时候我们发现空间是不足以AC的,所以我们可以滚动数组一下。 最后我们可以得到DP方程 1 2 3 4 5 6

Gqe 897

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NOIP2015提高组Day2 第二题 子串 解题报告

子串NOIP2015提高组Day2题目描述 输入格式输出格式样例输入输入1:6 3 1 aabaab aab输入2:6 3 2 aabaab aab输入3:6 3 3 aabaab aab样例输出输出1:2输出2:7输出3:7样例解释数据范围题解直接讲100分的算法。 动态规划。

XianHaoMing的博客 4726

NOIP 2015 Day 2 substring 子串(字符串 dp)

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

w4149 1191

NOIP2015 [stone][substring]

NOIP2015 跳石头 子串 DP 二分答案

Venishel的博客 439

NOIP 2015 Day2 解题报告(全面)

NOIP2015 day2

Hawo11的博客 1132

NOIP2015 提高组合集

NOIP 2015 提高组 合集 D1 T1 神奇的幻方 题目让你干啥你就干啥,让你咋走你就咋走就完事儿了 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define N 50 using namespace...

dianan0938的博客 276

NOIP2015 复盘

NOIP2015 复盘 D1T1 P2615 神奇的幻方 直接模拟,无需多说 NOIP2017初赛真题好像 #include<cstdio> const int maxn = 45; int a[maxn][maxn]; int n, x, y;//x means heng, y means shu void print() { for(int i = 1; i &...

dianshu0741的博客 241

模拟赛:NOIP2015题解(day2)

这两天打了一次NOIP2015day2,才得了140分…第二题空间开爆了… T1 河中跳石头 【问题描述】一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有N块岩石(不含起点和终点的岩石)。在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达终点。为了提高比赛难度,组委会计...

Richard__Luan的博客 463

NOIP2015 day2 解题报告

做题注意要把自己检验程序时多余printf的东西删掉啊,今天两道题ole… 第一题: 1 . 跳石头 (stone.cpp/c/pas) 【问题描述】 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选 择好了两块岩石作为比赛起点和终点。在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石) 。在比赛过程中,选手们将从起

Le Petit Prince 949

[NOIP2015提高组]子串

题目:洛谷P2679、Vijos P1982、codevs4560、UOJ#149。 题目大意:有长度为n的A串和长度为m的B串。现在要从A串中取出k个互不重叠的子串,使它们按顺序相连后得到B串。问有多少种方案。 解题思路:DP。 设f[i][j[[k][0]表示A的前i个字符匹配B的前j个字符,划分成k段,且当前A串这个字符不取的情况下的方案数。 f[i][j][k][1]则表...

308

Noip2015提高组解题报告

Day1 T1神奇的幻方 一道简单异常的小模拟,我们只需要确定数字1的位置,然后根据题意枚举即可,简简单单就A了,什么也不卡。 然而这题,我刚开始学OI的时候,因为当时比较蠢,被这题花式吊打啊....根本不会啊..... ε=(´ο`*)))唉又想起没学OI的自己了.. 虽然题简单,还是惯例丢代码 1 #include<bits/stdc++.h> 2 ...

weixin_33816611的博客 217
上一篇: 欧拉线性筛法求素数 学习报告
下一篇: 【Noi OpenJudge】 带通配符的字符串匹配 解题报告
Mario_sz
博客等级 码龄10年 14粉丝 14原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值