UVa 10723 电子人的基因(LCS)
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)的更多相关文章
- UVA10723 电子人的基因
UVA10723 电子人的基因 题目比较难找附上链接:https://vjudge.net/problem/UVA-10723 题目描述: 给你两个字符串,你需要找出一个最短的字符串,使得两个给定字符 ...
- UVA10723 电子人的基因 Cyborg Genes
题意翻译 [题目描述] 输入两个A~Z组成的字符串(长度均不超过30),找一个最短的串,使得输入的两个串均是它的子序列(不一定连续出现).你的程序还应统计长度最短的串的个数. e.g.:ABAAXGF ...
- UVa 10723 LCS变形 Cyborg Genes
题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...
- UVA.10066 The Twin Towers (DP LCS)
UVA.10066 The Twin Towers (DP LCS) 题意分析 有2座塔,分别由不同长度的石块组成.现在要求移走一些石块,使得这2座塔的高度相同,求高度最大是多少. 问题的实质可以转化 ...
- uva 10723 Cyborg Genes(LCS变形)
题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=107450#problem/C 题意:输入两个字符串,找一个最短的串,使得输入的两个 ...
- UVa 10723 Cyborg Genes (LCS, DP)
题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种. 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么 ...
- UVA - 10723 类似LCS
思路:dp(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串长度,cnt(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串的个数. 转移方程: if(s1[i] ...
- UVA - 10723 Cyborg Genes (LCS)
题目: 思路: 求两个串的最长公共子序列,则这个最短的串就是给出的两个串的长度和减去最长公共子序列的长度. 状态转移方程: 如果s[i-1]==t[j-1]就有dp[i][j] = dp[i-1][j ...
- uva 10723
10723 - Cyborg Genes Time limit: 3.000 seconds Problem F Cyborg Genes Time Limit 1 Second Septembe ...
随机推荐
- MyEclipse安装及破解步骤
MyEclipse2013 (32+64)下载地址(建议使用迅雷下载)http://downloads.myeclipseide.com/downloads/products/eworkbench/2 ...
- 如何正确的把 Java 数组 Array 转为列表 List
最近想把 java 数组转成 List,网上普遍的答案都是 Arrays.asList: String[] a = new String[] {"hello", "wor ...
- [LeetCode] 200. Number of Islands_ Medium tag: BFS
Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...
- 验证 Googlebot (检查是否为真的Google机器人)
您可以验证访问您服务器的网页抓取工具是否确实是 Googlebot(还是其他 Google 用户代理).如果您担心自称是 Googlebot 的垃圾内容发布者或其他麻烦制造者访问您的网站,则会发现该方 ...
- NuGet:自定义配置信息(2)
有些类库项目打包后,如何让别人引用的时候自动添加上对应的配置项目呢,比如EntityFramework的NuGet包,打开后可以看到类似下面的结构: 空白处右击——Add Content Folder ...
- JDK eclipse selenium 安装以及环境变量的配置
原文地址https://www.cnblogs.com/zmhsoup/p/5249663.html [自动化学习笔记]_环境搭建Selenium2+Eclipse+Java+TestNG_(一) 目 ...
- Vue.Js加入bootstrap及jquery,或加入其他插件vue-resource,vuex等
.引入jquery 项目目录下输入 cnpm install jquery --save-dev 用npm下载jq依赖 若想加入其他js库,如vue-resource,执行命令cnpm in ...
- python3 列表的常用方法
Python3中常用的列表方法(method) 见:help(list) 方法 意义 L.index(v [, begin[, end]]) 返回对应元素的索引下标, begin为开始索引,end为结 ...
- Linux基础命令---mknod
mknod 创建块设备或者字符设备文件.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 mknod [选项] ...
- 虚拟机中安装mac系统
虚拟机安装就很简单了,傻瓜式安装,一直点击下一步就行,这里就不多说了. 所需要的配置: 虚拟机下载地址:链接:http://pan.baidu.com/s/1i45wXRf 密码:7c4x mac补丁 ...