UVA - 10723 类似LCS
思路:dp(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串长度,cnt(i, j)表示第一个串前i个字符和第二个串前j个字符需要的最短字符串的个数。
转移方程:
if(s1[i] == s2[j]) dp[i][j] = dp[i-1][j-1] + 1; else dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1]);
if(s1[i] == s2[j]) cnt[i][j] = cnt[i-1][j-1]; //字符成功匹配
else {
if(dp[i-1][j] == dp[i][j-1])
cnt[i][j] = cnt[i-1][j] + cnt[i][j-1];
else if(dp[i-1][j] < dp[i][j-1])
cnt[i][j] = cnt[i-1][j];
else
cnt[i][j] = cnt[i][j-1];
}
AC代码
#include <cstdio>
#include <cmath>
#include <cctype>
#include <algorithm>
#include <cstring>
#include <utility>
#include <string>
#include <iostream>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <stack>
using namespace std;
#pragma comment(linker, "/STACK:1024000000,1024000000")
#define eps 1e-10
#define inf 0x3f3f3f3f
#define PI pair<int, int>
typedef long long LL;
const int maxn = 30 + 5;
char s1[maxn], s2[maxn];
int dp[maxn][maxn], cnt[maxn][maxn];
int main() {
int T, kase = 1;
scanf("%d", &T);
getchar();
while(T--) {
fgets(s1+1, sizeof(s1), stdin);
fgets(s2+1, sizeof(s2), stdin);
//scanf("%s%s", s1+1, s2+1);
int n = strlen(s1+1) - 1, m = strlen(s2+1) - 1;
for(int i = 0; i < maxn; ++i) {
dp[0][i] = dp[i][0] = i;
cnt[0][i] = cnt[i][0] = 1;
}
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
if(s1[i] == s2[j]) dp[i][j] = dp[i-1][j-1] + 1;
else dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1]);
}
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
if(s1[i] == s2[j]) cnt[i][j] = cnt[i-1][j-1];
else {
if(dp[i-1][j] == dp[i][j-1])
cnt[i][j] = cnt[i-1][j] + cnt[i][j-1];
else if(dp[i-1][j] < dp[i][j-1])
cnt[i][j] = cnt[i-1][j];
else
cnt[i][j] = cnt[i][j-1];
}
}
printf("Case #%d: %d %d\n", kase++, dp[n][m], cnt[n][m]);
}
return 0;
}
如有不当之处欢迎指出!
UVA - 10723 类似LCS的更多相关文章
- UVa 10723 LCS变形 Cyborg Genes
题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...
- uva 10723 Cyborg Genes(LCS变形)
题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=107450#problem/C 题意:输入两个字符串,找一个最短的串,使得输入的两个 ...
- UVa 10723 电子人的基因(LCS)
https://vjudge.net/problem/UVA-10723 题意: 输入两个A~Z组成的字符串,找一个最短的串,使得输入的两个串均是它的子序列,另外还需要统计长度最短的串的个数. 思路: ...
- UVa 10723 Cyborg Genes (LCS, DP)
题意:给定两行字符串,让你找出一个最短的序列,使得这两个字符串是它的子串,并且求出有多少种. 析:这个题和LCS很像,我们就可以利用这个思想,首先是求最短的长度,不就是两个字符串长度之和再减去公共的么 ...
- 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 ...
- UVA 111(LCS问题)
History Grading Background Many problems in Computer Science involve maximizing some measure accor ...
- UVA - 10635 LIS LCS转换
白书例题,元素互不相同通过哈希转换为LIS求LCS #include<iostream> #include<algorithm> #include<cstdio> ...
- uva 10453 dp/LCS变形
https://vjudge.net/problem/UVA-10453 给出一个字符串,问最少添加几个字符使其变为回文串,并输出任意一种答案.就是一个类似于LCS的题目,而且简化了一下,只会出现三种 ...
随机推荐
- Linux 下 编译Xerces-c++
按照 doc/html 文件夹中的详细指导编译 Xerces-C++ 共享库. 下面的命令展示了如何用压缩的源文件编译 Xerces-C++ 库. 这里假定在像 /home/ 这样的目录中有 xerc ...
- Apache Shiro java安全框架
什么是Apache Shiro? Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理功能,可为 ...
- 【转】char*,string,CString,int,char[]之间的转换
CString 头文件#include <cstring>.CString 转char * CString cstr; ..data(),返回没有”/“的字符串数组..c_str(),返 ...
- 使用Filebeat和Logstash集中归档日志
方 案 Filebeat->Logstash->Files Filebeat->Redis->Logstash->Files Nxlog(Rsyslog.Logstash ...
- java 多维数组遍历
java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ...
- Python之数据结构基础
一.数据结构基础 a.什么是数据结构 b.数据结构的分类 c.列表 import random from timewrap import ...
- Redis进阶实践之十 Redis主从复制的集群模式
一.引言 Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...
- 浅谈对SpringMVC的认识
SpringMVC概念: 他是一个轻量级的开源框架,应用于表现层,基于MVC的设计模式. SpringMVC的特点: 1.他是单例的可以设置成多例. 2.他的线程是安全的 ...
- CORS跨域请求之简单请求与非简单请求
先来看一个例子 定义server01的项目,在路由表中添加一条路由记录 url(r'^getData.html$',views.get_data) 对应的视图函数 from django.shortc ...
- ------- 软件调试——还原 QQ 过滤驱动对关键内核设施所做的修改 -------
-------------------------------------------------------------------------------- 在前一篇博文中,我们已经处理完最棘手的 ...