https://vjudge.net/problem/UVA-10723

题意:

输入两个A~Z组成的字符串,找一个最短的串,使得输入的两个串均是它的子序列,另外还需要统计长度最短的串的个数。

思路:

求两个串的公共子序列。那么最短串就是len1+len2-LCS值。

d[i][j]表示串1取前 i 个字符,串2取前 j 个字符时的LCS。

状态转移方程如下:

如果A[i]=A[j],d[i][j]=d[i-1][j-1]+1。否则,d[i][j]=max( d[i-1][j] ,d[i][j-1] )。

 #include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std; char s1[], s2[];
int d[][], f[][]; int main()
{
//freopen("D:\\txt.txt", "r", stdin);
int T;
int kase = ;
cin >> T;
getchar();
while (T--)
{
gets(s1);
gets(s2);
int len1 = strlen(s1);
int len2 = strlen(s2);
memset(d, , sizeof(d));
memset(f, , sizeof(f));
for (int i = ; i <= len1; i++)
f[i][] = ;
for (int i = ; i <= len2; i++)
f[][i] = ;
for (int i = ; i <= len1;i++)
for (int j = ; j <= len2; j++)
{
if (s1[i - ] == s2[j - ])
{
d[i][j] = d[i - ][j - ] + ;
f[i][j] = f[i - ][j - ];
}
else if (d[i - ][j] > d[i][j - ])
{
d[i][j] = d[i - ][j];
f[i][j] = f[i - ][j];
}
else if (d[i - ][j] < d[i][j - ])
{
d[i][j] = d[i][j - ];
f[i][j] = f[i][j - ];
}
else
{
d[i][j] = d[i - ][j];
f[i][j] = f[i - ][j] + f[i][j - ];
}
}
printf("Case #%d: %d %lld\n", ++kase, len1 + len2 - d[len1][len2], f[len1][len2]);
}
return ;
}

UVa 10723 电子人的基因(LCS)的更多相关文章

  1. UVA10723 电子人的基因

    UVA10723 电子人的基因 题目比较难找附上链接:https://vjudge.net/problem/UVA-10723 题目描述: 给你两个字符串,你需要找出一个最短的字符串,使得两个给定字符 ...

  2. UVA10723 电子人的基因 Cyborg Genes

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

  3. UVa 10723 LCS变形 Cyborg Genes

    题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...

  4. UVA.10066 The Twin Towers (DP LCS)

    UVA.10066 The Twin Towers (DP LCS) 题意分析 有2座塔,分别由不同长度的石块组成.现在要求移走一些石块,使得这2座塔的高度相同,求高度最大是多少. 问题的实质可以转化 ...

  5. uva 10723 Cyborg Genes(LCS变形)

    题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=107450#problem/C 题意:输入两个字符串,找一个最短的串,使得输入的两个 ...

  6. UVa 10723 Cyborg Genes (LCS, DP)

    题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种. 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么 ...

  7. UVA - 10723 类似LCS

    思路:dp(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串长度,cnt(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串的个数. 转移方程: if(s1[i] ...

  8. UVA - 10723 Cyborg Genes (LCS)

    题目: 思路: 求两个串的最长公共子序列,则这个最短的串就是给出的两个串的长度和减去最长公共子序列的长度. 状态转移方程: 如果s[i-1]==t[j-1]就有dp[i][j] = dp[i-1][j ...

  9. uva 10723

      10723 - Cyborg Genes Time limit: 3.000 seconds Problem F Cyborg Genes Time Limit 1 Second Septembe ...

随机推荐

  1. NYOJ 47

    思路: 在n>3的时候就用前两个小的来带后两个大的,有两种方式(一就是1,2先过,然后1回来,然后n,n-1过,然后2,回来),(二就是 1,n先过去 然后1回来,然后 1,n-1过去吗.,然后 ...

  2. POJ:2049Finding Nemo(bfs+优先队列)

    http://poj.org/problem?id=2049 Description Nemo is a naughty boy. One day he went into the deep sea ...

  3. 处理hash冲突

    “处理冲突” 的实际含义是: 为产生冲突的地址寻找下一个哈希地址. 1. 开放定址法 2. 链地址法 ------------------------------------------------- ...

  4. Jmeter接口自动化测试 (四)(持续构建)

    本文转载至http://www.cnblogs.com/chengtch/p/6145867.html  Jmeter是压力测试.接口测试工具,Ant是基于Java的构建工具,具有跨平台的作用,jen ...

  5. webdriver模拟鼠标悬浮

    未经作者允许,禁止转载! 有时候会遇到这样的情况,鼠标停留在某一区域,不需要点击,悬浮在这一区域的上方就会显示该区域的下拉框,如下图 下面将鼠标停留在“日历”和“星座”这两个部分之间来回悬浮,下面是代 ...

  6. font-awesome图标

  7. FastReport问题整理(转)

    FastReport问题整理 博客分类: 软件开发   部分来自网上,部分来自网友,部分来自Demo如果有新的内容,会不断更新.. 更新历史: 2009-02-27 加入套打方案全攻略(原:jinzh ...

  8. asp.net onclientclick事件刷新页面问题解决

      做网页经常要和JavaScript打交道,经常要用JavaScript做一些客户端的验证,但是如果我们的按钮用的是HTML控件的话,验证通过后无法调用后台代码,如果用服务器端控件,验证不通过有要刷 ...

  9. python练习题-简单方法判断三个数能否组成三角形

    python简单方法判断三个数能否组成三角形 #encoding=utf-8 import math while True: str=raw_input("please input thre ...

  10. jenkin环境搭建

      Jenkins是一个用Java编写的开源的持续集成(CI)工具,可持续.自动地构建/测试软件项目,监控一些定时执行的任务.具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点. 1.下载并解 ...