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 电子人的基因的更多相关文章

  1. UVA10723 电子人的基因 Cyborg Genes

    题意翻译 [题目描述] 输入两个A~Z组成的字符串(长度均不超过30),找一个最短的串,使得输入的两个串均是它的子序列(不一定连续出现).你的程序还应统计长度最短的串的个数. e.g.:ABAAXGF ...

  2. UVa 10723 电子人的基因(LCS)

    https://vjudge.net/problem/UVA-10723 题意: 输入两个A~Z组成的字符串,找一个最短的串,使得输入的两个串均是它的子序列,另外还需要统计长度最短的串的个数. 思路: ...

  3. DP题目推荐合集(洛谷/UVa)

    今天下午要参加海淀区的比赛了...这几天临时抱佛脚刷了几道DP,正所谓临阵磨枪,不快也光...下面我 就把最近刷到的,自己觉得不错的动态规划题列出来: 1.P2690 接苹果 :(基础二维DP) 2. ...

  4. 关于基因GO分析的DAVID简单使用

    利用DAVID简单的进行GO富集度分析(这里只做简单的分析,即看基因是否存在在GO的三个过程里面) 比如我们有一组要分析的基因:TRPV6    CXADR    PROM1    GRAMD2   ...

  5. 一些对数学领域及数学研究的个人看法(转载自博士论坛wcboy)

    转自:http://www.math.org.cn/forum.php?mod=viewthread&tid=14819&extra=&page=1 原作者: wcboy 现在 ...

  6. 机器学习&数据挖掘笔记_18(PGM练习二:贝叶斯网络在遗传图谱在的应用)

    前言: 这是coursera课程:Probabilistic Graphical Models上的第二个实验,主要是用贝叶斯网络对基因遗传问题进行一些计算.具体实验内容可参考实验指导教材:bayes ...

  7. Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc

    Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=========== ...

  8. 寻找与疾病相关的SNP位点——R语言从SNPedia批量提取搜索数据

    是单核苷酸多态性,人的基因是相似的,有些位点上存在差异,这种某个位点的核苷酸差异就做单核苷酸多态性,它影响着生物的性状,影响着对某些疾病的易感性.SNPedia是一个SNP调査百科,它引用各种已经发布 ...

  9. MIT Molecular Biology 笔记5 转录机制

    视频  https://www.bilibili.com/video/av7973580?from=search&seid=16993146754254492690 教材 Molecular ...

随机推荐

  1. AJAX--XMLHttpRequest对象

    创建XMLHttpRequest对象 XMLHttpRequest是AJAX的基础. 所有现代浏览器(IE7+.Firefox.Chrome.Safari以及Opera)均内建XMLHttpReque ...

  2. Python核心编程:8个实践性建议

    前言 我们在用Python进行机器学习建模项目的时候,每个人都会有自己的一套项目文件管理的习惯,我自己也有一套方法,是自己曾经踩过的坑踩过的雷总结出来的,现在在这里分享一下给大家,因为很多伙伴是接触P ...

  3. Qt入门-表格类QTableWidget

    原文 :http://blog.csdn.net/xgbing/article/details/7774737 表格是GUI中常用的控件,在Qt中,常用的表格类是QTableWidget. 示例: Q ...

  4. js无法监听input中js改变值的变化

    $(input).on('change',function(){ }) 当使用$(input).val('...');不会触发它的change事件 解决办法一:在改变它的值后,手动触发input的ch ...

  5. opencv:轮廓逼近与拟合

    轮廓逼近,本质上是减少编码点 拟合圆,生成最相似的圆或椭圆 #include <opencv2/opencv.hpp> #include <iostream> using na ...

  6. 手把手教你做一个python+matplotlib的炫酷的数据可视化动图

    1.效果图 2.注意: 上述资料是虚拟的,为了学习制作动图,构建的. 仅供学习, 不是真实数据,请别误传. 当自己需要对真实数据进行可视化时,可进行适当修改. 3.代码: #第1步:导出模块,固定 i ...

  7. 洛谷 P2709 小B的询问(莫队)

    题目链接:https://www.luogu.com.cn/problem/P2709 这道题是模板莫队,然后$i$在$[l,r]$区间内的个数就是$vis[ ]$数组 $add()$和$del()$ ...

  8. Eclipse导入git上的maven web项目 以及部署成功运行

      在公司开发的时候都是用maven 以及git环境 开发的环境,那么我们初学者怎么将公司的项目成功导入到eclipse中,并且成功运行那???下面的教程就可以告诉大家~ (ps:第二步可能是大家会遇 ...

  9. X-Frame-Options报错处理

    项目中用到iframe嵌入网页,因为是前后端分离的,所以前端会报错Refused to display ‘网址' in a frame because it set 'X-Frame-Options' ...

  10. element-ui表头render-header 传自定义参数

    最近用到 element 的表格的  render-header 这个属性查了文档 发现: 发现它会返回部分参数 但是因为考虑要工程化,需要自定义传入参数,后来找度娘 ,发现是可以自定义传参的 :re ...