UVa10723 - Cyborg Genes
这题我能想到的解决方法是:
最优解的长度好找,两串的长度和-LCS;
根据anslen,枚举出解的数目。。。但想不出简单有效的枚举方法,这种做法可能超时
网上看大神的博客后,发现大家都用的此方法:
最长目标串的长度为两串和减去最大公共子序列;
最长目标串的数量就是所有长度相同的情况的数量加和(路径的加和)(具体做法详见代码)
对于解的数量的求取我想了半天没有彻底的想明白,这也许说明我对LCS这方面的实现原理还是理解的不够透彻
需要注意的地方:1.有可能有空串
2.两串长度为30的串,最坏情况下合成的串有2^30次方
分析+学习:40分钟左右
coding+debug:15分钟左右
我还是蒟蒻..........能成长起来吗?
现在的我不敢说不行,也不得不说不行
寒假开学,中午到的校,在寝室坐不住,下午两天就跑机房来了,昨晚赶火车到现在一共睡了两个点不到= =。。一路上慌慌张张,生怕别人知道我是来干啥的。。。哎
怕的不是别人会崇拜,怕的是嘲笑
/*
* Author: Bingo
* Created Time: 2015/3/6 14:37:20
* File Name: uva 10723.cpp
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <time.h>
using namespace std;
const int maxint = -1u>>;
unsigned int dp[][];
unsigned int f[][];
int T;
string sa,sb;
int main () {
while (cin>>T){
int c=;
getchar();
while (T--){
c++;
char s[];
gets(s);sa=s;gets(s);sb=s;
long long lena,lenb;
lena=sa.size();
lenb=sb.size();
memset(dp,,sizeof(dp));
memset(f,,sizeof(f));
for (int i=;i<=lena;i++)
f[i][]=;
for (int i=;i<=lenb;i++)
f[][i]=;
for (int i=;i<=lena;i++)
for (int j=;j<=lenb;j++) {
if (sa[i-]==sb[j-]){
dp[i][j]=dp[i-][j-]+;
f[i][j]=f[i-][j-];
}else {
if (dp[i-][j]>dp[i][j-]){
dp[i][j]=dp[i-][j];
f[i][j]=f[i-][j];
}
if (dp[i-][j]<dp[i][j-]){
dp[i][j]=dp[i][j-];
f[i][j]=f[i][j-];
}
if (dp[i-][j]==dp[i][j-]){
dp[i][j]=dp[i-][j];
f[i][j]=f[i-][j]+f[i][j-];
}
}
}
cout << "Case #"<<c<<": "<<lena+lenb-dp[lena][lenb]<<" "<<f[lena][lenb]<<endl;
}
}
}
附:
A后再去网上研究其他大神代码,找到一个利用递归,记忆化搜出所有解的数目的code
0.012s过的,速度很不错了
这不正是前几个题所体现的原理嘛?看样子我还是没想起来。
由此领悟到了一条道理:当想枚举所有情况搜时,可以用递归暴搜,然后加 记忆化 优化
转:http://blog.csdn.net/shiqi_614/article/details/7013708
UVa10723 - Cyborg Genes的更多相关文章
- 10723 Cyborg Genes (LCS + 记忆化搜索)
Problem F Cyborg Genes Time Limit 1 Second September 11, 2132. This is the day that marks the beginn ...
- UVa 10723 LCS变形 Cyborg Genes
题解转自: UVA 10723 Cyborg Genes - Staginner - 博客园 首先这个题目肯定是按最长公共子序列的形式进行dp的,因为只有保证消去的一部分是最长公共子序列才能保证最后生 ...
- UVA10723 电子人的基因 Cyborg Genes
题意翻译 [题目描述] 输入两个A~Z组成的字符串(长度均不超过30),找一个最短的串,使得输入的两个串均是它的子序列(不一定连续出现).你的程序还应统计长度最短的串的个数. e.g.:ABAAXGF ...
- uva 10723 Cyborg Genes(LCS变形)
题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=107450#problem/C 题意:输入两个字符串,找一个最短的串,使得输入的两个 ...
- Cyborg Genes
题意: 给两个字符串,求最短的以两字符串为子序列的字符串和个数 分析: 最长公共子序列的变形,num[i][j]表示个数 #include <map> #include <set&g ...
- UVA-10273 Cyborg Genes (DP)
题目大意:给两个字符串a.b,找出一个最短的字符串c,使得这两个字符串都是c的子序列.只需找出p的最小长度和最小长度时的个数. 题目分析:与LCS问题类似.最小长度的状态转移方程,dp(i,j)=mi ...
- 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】Cyborg Genes
[Link]: [Description] 给你两个串s1,s2; 让你生成一个串S; 使得s1和s2都是S的子列; 要求S最短; 求S的不同方案个数; [Solution] 设两个串的长度分别为n1 ...
随机推荐
- 201521123081《Java程序设计》 第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 参考资料:百度脑图(上图为第3周实验学习总结中未展开部分) 1.2 使用常规方法总结其他上课内容. 多态.思维导图中有提及. 2. ...
- 201521123078《java程序设计》第四次总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 继承是面向对象最显著的一个特性.继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性 ...
- 201521123112《Java程序设计》第3周学习总结
1.本周学习总结 使用工具:百度脑图 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int ...
- 201521123072《Java程序》第二周总结
201521123072<Java程序>第二周总结 标签(空格分隔): Java学习 [TOC] 1,本周小结 1,字符串的使用, (字符串变量作为对象来处理),所以字符串相等就要用到eq ...
- 201521123010 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- JAVA课程设计 学生成绩管理
学生成绩管理 可实现功能: 添加学生功能:姓名.学号.性别.出生年月日.(学号自动生成且唯一) 添加学生成绩功能:每个人都有数学.Java与体育四门课,可分课程输入成绩. 根据学生学号查找学生成绩功能 ...
- Linux SDK之uClinux、Broadcom、Atheros、Realtek、Ralink、Marvell、Intel
接触的Linux SDK越来越多,整理整理,分享分享,不求系统全面,对您有帮助便足矣 文中大部分是与AP/Router SoC解决方案(单芯片WIFI 路由器解决方案)相关的Linux SDK SDK ...
- 《Head First Java》读书笔记(1) - Java语言基础
<Head First Java>(点击查看详情) 1.写在前面的话 这本书的知识点说实话感觉有点散乱,但是贵在其将文字转换成了生动和更容易接受的图片,大量的比喻让人感受到了知识点的有趣之 ...
- RG_5
必须发博纪念经过昨天的开车, 作业本终于做完啦!!! 可以认真的刷题了.
- struts2---自定义类型转换器
从servlet我们知道从页面获取到的参数都是string类型,但是struts2中基本的数据类型,它可以自动帮我们转化为其对应的包装类,就像获取到123,可以自动转化为Integer,但是比如201 ...