当前位置: 首页 > news >正文

线性dp:P2679 子串

1.P2679 子串

传送门icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P2679这道题是公共子串问题的变种,但是我第一时间确实没想到转移方程(写少了)

一开始看了题解也没太看懂,直到自己模拟一遍(模拟数据便于理解原理)下面是感悟

这道题我最初的疑惑点在于究竟是定住a串找b串,还是定住b串找a串。我在一开始的想法是定住b串找a串,因为这道题我们想要用a串中的子串来匹配b串。但是后来我发现这不可行,因为a串只能按照顺序来找,如果定住b串,就不能保证后面补充的是从前面来的了,如此一来并不好操作(子串间连接顺序不同)。

这里还用到了一个优化,把第一维a串的遍历省掉了,因为每一次只与前一个位置的有关

下面直接用代码来解释(有注释)

Welcome - Luogu Spilopelia 配合这个食用

图摘自https://www.luogu.com.cn/article/k0zkdin9

// Problem: 
//     P2679 [NOIP2015 提高组] 子串
//   
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2679
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
using namespace std;
int f[2][205][205][2];//这个和上一个  / 匹配的m / 多少个子串 / 用或者不用这个a[i]
char a[1005],b[205];
const int P=1000000007;int main(){int n,m,k;cin>>n>>m>>k;cin>>(a+1)>>(b+1);f[0][0][0][0]=1;f[1][0][0][0]=1;  //不用a[i]满足0个b对应x个a的情况(0<=x<=n)这里x被简化成0/1了for(int i=1;i<=n;++i){for(int j=1;j<=m;++j){for(int p=1;p<=k;++p){if(a[i]==b[j]){//如果这两个匹配f[i%2][j][p][1]=((f[(i-1)%2][j-1][p][1]+f[(i-1)%2][j-1][p-1][1])%P+f[(i-1)%2][j-1][p-1][0]%P)%P;f[i%2][j][p][0]=(f[(i-1)%2][j][p][0]+f[(i-1)%2][j][p][1])%P;}else{f[i%2][j][p][1]=0;f[i%2][j][p][0]=(f[(i-1)%2][j][p][0]+f[(i-1)%2][j][p][1])%P;//用这里收割从前面来的子串}}}}cout<<(f[n%2][m][k][0]+f[n%2][m][k][1])%P;return 0;
}

相关文章:

  • C++ 补充之常用遍历算法
  • finedance 测试笔记
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:Popup控制)
  • RK3568 Android12 适配抖音 各大APP
  • 备战蓝桥杯---状态压缩DP进阶题1
  • qsort使用
  • 数据库-第二/三章 关系数据库和标准语言SQL【期末复习|考研复习】
  • Springboot+vue的商业辅助决策系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目
  • 微信小程序自制动态导航栏
  • GNER: 生成式实体识别的新 SoTA
  • 数据结构实现-线性表
  • Javaweb之SpringBootWeb案例之自动配置的原理分析的详细解析
  • Flink基本原理 + WebUI说明 + 常见问题分析
  • element-plus表格合并
  • C 基本语法
  • 深入了解以太坊
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Angular Elements 及其运作原理
  • JS变量作用域
  • nodejs调试方法
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • springboot_database项目介绍
  • zookeeper系列(七)实战分布式命名服务
  • 搞机器学习要哪些技能
  • 好的网址,关于.net 4.0 ,vs 2010
  • 嵌入式文件系统
  • 消息队列系列二(IOT中消息队列的应用)
  •  一套莫尔斯电报听写、翻译系统
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #Linux(权限管理)
  • #pragma预处理命令
  • ${factoryList }后面有空格不影响
  • (06)金属布线——为半导体注入生命的连接
  • (C语言)fgets与fputs函数详解
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (四)鸿鹄云架构一服务注册中心
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .bat文件调用java类的main方法
  • .Net 4.0并行库实用性演练
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net 中viewstate的原理和使用
  • .Net8 Blazor 尝鲜
  • .NET构架之我见
  • .NET框架
  • .NET命名规范和开发约定
  • .NET中winform传递参数至Url并获得返回值或文件
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /etc/skel 目录作用
  • @SuppressWarnings(unchecked)代码的作用
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [20171113]修改表结构删除列相关问题4.txt