2018.11.2 2018NOIP冲刺之最短公共父串
很有意思的一个题
|
试题描述
|
|
给定字符串A和字符串B,要求找一个最短的字符串,使得字符串A和B均是它的子序列。
|
|
输入
|
|
输入包含两行,每行一个字符串,分别表示字符串A和字符串B。(串的长度不超过30)
|
|
输出
|
|
输出A和B最短公共父串的长度以及在该长度下可以生成的父串个数,用空格隔开。
|
|
输入示例
|
|
ABAAXGF
AABXFGA |
|
输出示例
|
|
10 9
|
|
其他说明
|
|
ABAAXGF和AABXFGA的最短公共父串之一是AABAAXGFGA,长度为10,满足该长度的父串一共有9个。
|
看到这个题有没有想到最长公共子序列??这个题情况类似
我们用dp[i][j]表示第一个串前i位以及第二个串前j位最短公共父串的长度,用f[i][j]同理表示有几个最短公共父串
不难得到
当a[i]==b[j]时 dp[i][j]=dp[i-1][j-1]+1
否则dp[i][j]=min(dp[i-1][j],dp[i][j-1])+1(参见最长公共子序列)
同样的
当a[i]==b[j]时说明串的个数应该从f[i-1][j-1]的位置转移 于是f[i][j]=f[i-1][j-1]
否则:
(1)当dp[i-1][j]<dp[i][j-1]时说明从f[i-1][j]转移的父串最短 于是f[i][j]=f[i-1][j]
(2)当dp[i][j-1]<dp[i-1][j]时说明从f[i][j-1]转移的父串最短 于是f[i][j]=f[i][j-1]
(3)当dp[i-1][j]==dp[i][j-1]时说明两边转移的父串都是最短 于是f[i][j]=f[i-1][j]+f[i][j-1]
上代码
#include<iostream>
#include<cstring>
using namespace std;
int dp[][],f[][],len1,len2,cnt;
char a[],b[];
int main()
{
gets(a+),gets(b+);
len1=strlen(a+),len2=strlen(b+);
for(int i=;i<=max(len1,len2);i++)dp[i][]=dp[][i]=i;
for(int i=;i<=max(len1,len2);i++)f[i][]=f[][i]=;
for(int i=;i<=len1;i++)
{
for(int j=;j<=len2;j++)
{
if(a[i]==b[j])
{
dp[i][j]=dp[i-][j-]+;
f[i][j]=f[i-][j-];
}
else
{
dp[i][j]=min(dp[i-][j],dp[i][j-])+;
if(dp[i-][j]<dp[i][j-])f[i][j]=f[i-][j];
else if(dp[i][j-]<dp[i-][j])f[i][j]=f[i][j-];
else f[i][j]=f[i-][j]+f[i][j-];
} }
}
printf("%d %d",dp[len1][len2],f[len1][len2]);
}
2018.11.2 2018NOIP冲刺之最短公共父串的更多相关文章
- LRJ入门经典-0906最短公共父串305
原题 LRJ入门经典-0906最短公共父串305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 给定字符串A和字符串B,要求 ...
- 2018.10.20 2018NOIP冲刺之酒厂选址
题目传送门 明显能够看出有一个建图求路程的优化 然而发现10000*10000爆空间QAQ 为了做一些初始化方面的优化 我们发现了一个叫做前缀和的东西 可以在环上查到两个之间的最短距离 同时还要做一些 ...
- 2018.10.1 2018NOIP冲刺之立体图
2008NOIP普及组立体图 请自行百度(事实上放不下了) 图不是很清楚 下面有 [输入] 输入文件 drawing.in 第一行有用空格隔开的 2 个整数 m 和 n,表示有 m*n 个格子 (1 ...
- 2018.9.26 2018NOIP冲刺之栈
最小字典序(stack) 输入序列中有 n 个正整数,栈 S 开始为空. 你每次只可以进行下面两种操作之一:① 将输入序列头端的数据移至 S 栈顶(进 S 栈): ② 将 S 栈顶元素输出并删除(退 ...
- 2018.9.8 2018NOIP冲刺之配对
普及组第四题难度 主体思路竟然是贪心Q_Q 链接:https://www.nowcoder.com/acm/contest/164/D来源:牛客网 题目描述 小A有n个长度都是L的字符串.这些字符串只 ...
- OI生涯回忆录 2018.11.12~2019.4.15
上一篇:OI生涯回忆录 2017.9.10~2018.11.11 一次逆风而行的成功,是什么都无法代替的 ………… 历经艰难 我还在走着 一 NOIP之后,全机房开始了省选知识的自学. 动态DP,LC ...
- China Intelligent Office Summit(2018.11.21)
时间:2018.11.21地点:中关村软件园国际会议中心
- International Programming Retreat Day(2018.11.17)
时间:2018.11.17地点:北京国华投资大厦
- Intel Artificial Intelligence Conference(2018.11.14)
时间:2018.11.14地点:北京国贸大酒店
随机推荐
- Mybatis 一对多 配置文件
当一个Entity中包含的属性有对象和对象集合时,用mybatis映射时要在Entity中添加一个字段来唯一标识当前的Entity对象.否则查询的Entity集合中的对象会被覆盖掉. 如下一个POJO ...
- Fedora 30 安装 Gradle
当前的 Gradle 最新版本是5.4.1.您可以从发布页面下载所有 Gradle 版本的二进制文件和查看文档. 先决条件 Gradle 能够在所有主流操作系统上运行,只要具备 Java-JDK/JR ...
- debian8 root无法远程登录解决办法
改一下root 密码,应该就能本地登录了. 改/etc/ssh/sshd.conf,然后重启ssh就能远程登录了:PermitRootLogin yesPermitEmptyPasswords no
- c# wpf 利用截屏键实现截屏功能
原文:c# wpf 利用截屏键实现截屏功能 最近做一个wpf程序需要截图功能,查找资料费了一些曲折,跟大家分享一下. 先是找到了这样一份代码: static class Scr ...
- Entity种类(动态代理)
动态代理:延迟加载+自动化修改跟踪满足条件 修改方式见修改EF设置eg. 测试 结果
- C# 不重启程序修改并保存配置文件(appSettings节点)
原文:C# 不重启程序修改并保存配置文件(appSettings节点) private static void UpdateAppConfig(string newKey, string newVal ...
- OPENGL---Ps 径向模糊算法(glsl)
原文:OPENGL---Ps 径向模糊算法(glsl) 本文转载自: http://blog.csdn.net/zx6733090/article/details/40311689 功能本人之前也介 ...
- 笔记:Advanced Installer 打包Web应用
原文:笔记:Advanced Installer 打包Web应用 公司要做一款增值税小产品,区别于ACME,本产品核心只有销项部分,面对的客户群是小企业,单税盒单开票机..... 我要做的主要有以下几 ...
- ring3下利用WMI监视进程创建(vc版)
#include "stdafx.h" #define _WIN32_DCOM #include <iostream> using namespace std; #in ...
- 无辜的RAD(RAD是让你去创造和使用可复用的组件,不是让程序员“变白痴”)good
无辜的RAD 2005-3-21 说实话,RAD很无辜.从出生的那天其就被骂,天天被指着鼻子说“不就是拖个控件嘛”,就好像当年说学电脑“不就是插个鼠标嘛”.也怪程序员大都天性犯贱,就爱一遍又一便的写基 ...