UVA10723 电子人的基因
UVA10723 电子人的基因
题目比较难找附上链接:https://vjudge.net/problem/UVA-10723
题目描述:
给你两个字符串,你需要找出一个最短的字符串,使得两个给定字符串都是找出字符串的子序列
同时,还要找出这个最短的字符串的组成方案有几种。
多组数据,输出格式见样例。
样例输入:
3
ABAAXGF
AABXFGA
ABA
BXA
AABBA
BBABAA
样例输出:
Case #1: 10 9
Case #2: 4 1
Case #3: 8 10
题目分析:
首先不考虑寻找的串最短,只考虑使两个串均为找到的串的自序
那么很显然,我们可以直接将两个给定的字符串拼接起来,得到答案
到了这里,我们可以考虑,在这个拼接的串中,删去一些不必要的字符,来得到最优解
考虑可以删去的字符,一定同时两个串中,位置任意,所以,只要删去两个串的最长公共子序列即可
最优解的字符串长度 = len1 + len2 - len_(lcs(a,b))
考虑维护f[i][j](LCS)的同时维护g[j][j](a串匹配到i位,b串到第j位,最优解的方案数)
转移的时候,f从哪里转移,g必然也从什么地方转移(详见代码)
注:原题面数据丧心病狂卡了读入,两个字符串中存在空格这种东西,不能用scanf,用gets即可
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define RI register int
using namespace std;
typedef long long ll; const int INF = 1e9 + ;
const int MAXN = + ; #define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) < (b) ? (a) : (b)) inline void read(int &x)
{
x = ;
bool flag = ;
char ch = getchar();
while(ch < '' || ch > '')
{
if(ch == '-') flag = ;
ch = getchar();
}
while(ch >= '' && ch <= '')
{
x = x * + ch - '';
ch = getchar();
}
if(flag) x *= -;
} int T,len1,len2,t;
char a[MAXN],b[MAXN];
ll f[MAXN][MAXN],g[MAXN][MAXN]; void init()
{
memset(f,,sizeof(f));
memset(g,,sizeof(g));
memset(a,,sizeof(a));
memset(b,,sizeof(b));
//scanf("%s",a + 1);
//scanf("%s",b + 1);
gets(a + );
gets(b + );
len1 = strlen(a + );
len2 = strlen(b + );
} int main()
{
read(T);
while(T --)
{
init();
for(int i = ;i <= max(len1,len2);i ++)
g[i][] = g[][i] = ;
for(RI i = ;i <= len1;i ++)
{
for(RI j = ;j <= len2;j ++)
{
if(a[i] == b[j])
{
f[i][j] = f[i - ][j - ] + ;
g[i][j] += g[i - ][j - ];
}
else
{
f[i][j] = max(f[i - ][j],f[i][j - ]);
if(f[i - ][j] > f[i][j - ])
g[i][j] += g[i - ][j];
else if(f[i - ][j] < f[i][j - ])
g[i][j] += g[i][j - ];
else
g[i][j] += g[i - ][j] + g[i][j - ];
}
}
}
printf("Case #%d: %lld %lld\n",++ t,len1 + len2 - f[len1][len2],g[len1][len2]);
} return ;
}
UVA10723 电子人的基因的更多相关文章
- UVA10723 电子人的基因 Cyborg Genes
题意翻译 [题目描述] 输入两个A~Z组成的字符串(长度均不超过30),找一个最短的串,使得输入的两个串均是它的子序列(不一定连续出现).你的程序还应统计长度最短的串的个数. e.g.:ABAAXGF ...
- UVa 10723 电子人的基因(LCS)
https://vjudge.net/problem/UVA-10723 题意: 输入两个A~Z组成的字符串,找一个最短的串,使得输入的两个串均是它的子序列,另外还需要统计长度最短的串的个数. 思路: ...
- DP题目推荐合集(洛谷/UVa)
今天下午要参加海淀区的比赛了...这几天临时抱佛脚刷了几道DP,正所谓临阵磨枪,不快也光...下面我 就把最近刷到的,自己觉得不错的动态规划题列出来: 1.P2690 接苹果 :(基础二维DP) 2. ...
- 关于基因GO分析的DAVID简单使用
利用DAVID简单的进行GO富集度分析(这里只做简单的分析,即看基因是否存在在GO的三个过程里面) 比如我们有一组要分析的基因:TRPV6 CXADR PROM1 GRAMD2 ...
- 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)
转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...
- 机器学习&数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)
前言: 这是coursera课程:Probabilistic Graphical Models上的第二个实验,主要是用贝叶斯网络对基因遗传问题进行一些计算.具体实验内容可参考实验指导教材:bayes ...
- Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc
Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=========== ...
- 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据
是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...
- MIT Molecular Biology 笔记5 转录机制
视频 https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...
随机推荐
- Django_连接MySQL
1. 在Settings中修改 2. 创建数据库 3. 连接mysql 4. pymysql 4.1 安装pymysql 在项目的init文件中添加 Django2.2 不需要伪装
- 问题总结:mysql和javaweb工程连接的过程中容易产生的问题
问题背景:自己在本机的mysql8瘫痪了,将Oracle中的数据迁移到mysql之后,配置好javaweb工程和虚拟机上的远程Mysql连接的文件之后:遇见了无法访问的问题 具体的配置: dataso ...
- Python spyder-快捷键-多行注释
选中多行后: Ctrl + 1: 注释/反注释 Ctrl + 4/5: 块注释/块反注释 Ctrl + L: 跳转到行号 Tab/Shift + Tab: 代码缩进/反缩进
- Python 字符串格式化操作 - format方法
建议使用format()方法 字符串操作 对于 %, 官方以及给出这种格式化操作已经过时,在 Python 的未来版本中可能会消失. 在新代码中使用新的字符串格式.因此推荐大家使用format()来替 ...
- PyQt5遇到的一个坑 "ImportError: unable to find Qt5Core.dll on PATH" 及解决办法
最近再实现一个功能,主要是将自动化测试界面化 环境组合为:Windows 64bit + PyCharm + Python + PyQt5 + Pyinstaller + Inno Setup PS ...
- 【代码总结】Spring MVC数据校验
1.实验介绍 --------------------------------------------------------------------------------------------- ...
- windows线程同步的几种方式
以下为main函数的测试代码 具体线程同步的实现代码请下载:https://github.com/kingsunc/ThreadSynchro #include <stdio.h> #in ...
- boolean类型set、get方法
今天在了解lombok的时候偶然看到一个问题,在bean中存在boolean类型的数据的时候,用eclipse工具自动生成的set.get方法存在的问题. 不管变量为isXXX还是XXX时,set.g ...
- UseIIS
asp.net core webapi的program.cs 文件中,要加上 使用IIS进程内,可以大幅提高处理速度
- 流式计算(三)-Flink Stream 篇一
原创文章,谢绝任何形式转载,否则追究法律责任! 流的世界,有点乱,群雄逐鹿,流实在太多,看完这个马上又冒出一个,也不知哪个才是真正的牛,据说Flink是位重量级选手,能流计算,还能批处理, 和其他伙 ...