LRJ入门经典-0906最短公共父串305
原题
LRJ入门经典-0906最短公共父串305 |
难度级别:B; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B |
试题描述
|
给定字符串A和字符串B,要求找一个最短的字符串,使得字符串A和B均是它的子序列。
|
输入
|
输入包含两行,每行一个字符串,分别表示字符串A和字符串B。(串的长度不超过30)
|
输出
|
输出A和B最短公共父串的长度以及在该长度下可以生成的父串个数,用空格隔开。
|
输入示例
|
ABAAXGF
AABXFGA |
输出示例
|
10 9
|
其他说明
|
ABAAXGF和AABXFGA的最短公共父串之一是AABAAXGFGA,长度为10,满足该长度的父串一共由9个。
|
分析
代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int MAXL=32;
char S1[MAXL],S2[MAXL];
LL len1,len2,Pa[MAXL][MAXL],Pac[MAXL][MAXL];
LL dpPa(int i1,int i2)
{
LL& ans=Pa[i1][i2];
if(ans!=-1) return ans;
if(i1==0 || i2==0) return ans=max(i1,i2);
if(S1[i1]==S2[i2]) return ans=dpPa(i1-1,i2-1)+1;
int a=dpPa(i1-1,i2);
int b=dpPa(i1,i2-1);
return ans=min(a,b)+1;
}
LL dpPac(int i1,int i2)
{
LL& ans=Pac[i1][i2];
if(ans!=-1) return ans;
if(i1==0 || i2==0) return ans=1;
if(S1[i1]==S2[i2]) return ans=dpPac(i1-1,i2-1); LL sl1=dpPa(i1-1,i2),sl2=dpPa(i1,i2-1);
if(sl1==sl2) ans=dpPac(i1-1,i2)+dpPac(i1,i2-1);
else if(sl1<sl2) ans=dpPac(i1-1,i2);
else ans=dpPac(i1,i2-1);
return ans;
}
int main()
{
gets(S1+1),gets(S2+1);
len1=strlen(S1+1),len2=strlen(S2+1);
memset(Pa,-1,sizeof(Pa)),memset(Pac,-1,sizeof(Pac));
cout<<dpPa(len1,len2)<<" "<<dpPac(len1,len2)<<endl;
/*for(int i=0;i<=len1;i++)
{
for(int j=0;j<=len2;j++) cout<<Pa[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(int i=0;i<=len1;i++)
{
for(int j=0;j<=len2;j++) cout<<Pac[i][j]<<" ";
cout<<endl;
}*/
return 0;
}
LRJ入门经典-0906最短公共父串305的更多相关文章
- 2018.11.2 2018NOIP冲刺之最短公共父串
很有意思的一个题 试题描述 给定字符串A和字符串B,要求找一个最短的字符串,使得字符串A和B均是它的子序列. 输入 输入包含两行,每行一个字符串,分别表示字符串A和字符串B.(串的长度不超过30) 输 ...
- LRJ入门经典-0907万圣节的小L306
原题 LRJ入门经典-0907万圣节的小L306 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 今天是万圣节,小L同学开始了 ...
- LRJ入门经典-0905邮票和信封305
原题 LRJ入门经典-0905邮票和信封305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 假定一张信封最多贴5张邮票,如 ...
- LRJ入门经典-0903切蛋糕305
原题 LRJ入门经典-0903切蛋糕305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 如图所示有一个矩形蛋糕,上面划分成 ...
- C++语言学习——LRJ入门经典笔记
1.scanf的输入格式,空格.TAB和回车符都是无关紧要,所以按Enter键并不意味着输入结束. 告诉程序输入结束的方式: 在windows下,输入完毕后先按Enter键,再按Ctrl+Z键,最后再 ...
- C++入门经典-例6.23-字符串数组赋值与string
1:代码如下: // 6.23.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #inc ...
- C++入门经典-例6.22-字符串与数组,string类型的数组
1:数组中存储的数据也可以是string类型的.代码如下: // 6.22.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include ...
- C++入门经典-例6.19-字符串类型之修改string字符串的单个字符串
1:头文件 #include <string> 声明一个string变量,形式如下: std::string s; 初始化string类型的变量: std::string s1(" ...
- C++入门经典-例6.7-字符串比较
1:strcmp函数,用于比较两个字符串.格式如下: strcmp(字符数组名1,字符数组名2) 按照ASCII码,按顺序比较两个数组中的字符,并由函数返回值返回比较结果的执行过程. (1)各自选中自 ...
随机推荐
- Android实战技巧之三十七:图片的Base64编解码
通经常使用Base64这样的编解码方式将二进制数据转换成可见的字符串格式,就是我们常说的大串.10块钱一串的那种,^_^. Android的android.util包下直接提供了一个功能十分完备的Ba ...
- hdoj--1237--简单计算器(栈模拟)
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- C# 蚁群优化算法实现
C# 蚁群优化算法实现 需求为(自己编的,非实际项目): 某配送中心进行揽货,目标客户数为50个客户,配送中心目前的运力资源如下: 现有车辆5台 单台运力最大行驶距离200千米 单台运力最大载重公斤1 ...
- 33.AngularJS 应用 angular.module定义应用 angular.controller控制应用
转自:https://www.cnblogs.com/best/tag/Angular/ AngularJS 模块(Module) 定义了 AngularJS 应用. AngularJS 控制器(Co ...
- 19.允许重复的unordered_map
#include <string> #include <iostream> //查询性能最高 //允许重复的,hash_map #include <unordered_m ...
- SparkCore基础(一)
* SparkCore基础(一) 学习Spark,首先要熟悉Scala,当然你说你会Python或者Java能不能玩Spark?能!但是不推荐,首推Scala,因为Scala非常便捷,而且Scala有 ...
- CUDA笔记(十)
下午仔细研究了两个程序,然后搜了一下解决方法 http://blog.sina.com.cn/s/blog_6de28fbd01011cru.html http://blog.csdn.net/che ...
- ubuntu重启网络报错
执行:gw@ubuntu:/$ /etc/init.d/networking restart 报错:stop: Rejected send message, 1 matched rules; type ...
- 解决mongodb TypeError: Cannot read property 'XXX' of null 问题
有时候我们的字段里的数据为空而去查询就会报错. 比如以下形式: “cartList”:[] “cartList”:[{}] “cartList”:{} “cartList”:null 在查询的时候加上 ...
- uname---用于打印当前系统相关信息
uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...