这题我能想到的解决方法是:

最优解的长度好找,两串的长度和-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的更多相关文章

  1. 10723 Cyborg Genes (LCS + 记忆化搜索)

    Problem F Cyborg Genes Time Limit 1 Second September 11, 2132. This is the day that marks the beginn ...

  2. UVa 10723 LCS变形 Cyborg Genes

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

  3. UVA10723 电子人的基因 Cyborg Genes

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

  4. uva 10723 Cyborg Genes(LCS变形)

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

  5. Cyborg Genes

    题意: 给两个字符串,求最短的以两字符串为子序列的字符串和个数 分析: 最长公共子序列的变形,num[i][j]表示个数 #include <map> #include <set&g ...

  6. UVA-10273 Cyborg Genes (DP)

    题目大意:给两个字符串a.b,找出一个最短的字符串c,使得这两个字符串都是c的子序列.只需找出p的最小长度和最小长度时的个数. 题目分析:与LCS问题类似.最小长度的状态转移方程,dp(i,j)=mi ...

  7. UVa 10723 Cyborg Genes (LCS, DP)

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

  8. UVA - 10723 Cyborg Genes (LCS)

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

  9. 【Uva 10723】Cyborg Genes

    [Link]: [Description] 给你两个串s1,s2; 让你生成一个串S; 使得s1和s2都是S的子列; 要求S最短; 求S的不同方案个数; [Solution] 设两个串的长度分别为n1 ...

随机推荐

  1. 201521123114《Java程序设计》第9周学习总结

    1. 本章学习总结 2. 书面作业 Q1. 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常出现的异常 ...

  2. 201521123118《java程序与设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容 2. 书面作业 1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synch ...

  3. 201521123031 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 1.将Student对象(属性:int id, String name,int age,dou ...

  4. 06jQuery-05-事件

    不同的浏览器绑定事件的代码都不太一样,所以我们使用jQuery来写代码的话,可以屏蔽不同浏览器之间的差异. 在jQuery中,可以使用 on 来绑定一个事件,指定事件的名称和对应的处理函数: // 获 ...

  5. SIT 和 UAT

    在企业级软件的测试过程中,经常会划分为三个阶段--单元测试,SIT和UAT,如果开发人员足够,通常还会在SIT之前引入代码审查机制(Code Review)来保证软件符合客户需求且流程正确.下面简单介 ...

  6. const在c和c++中的不同

    最近开始由学习c转到c++:从面向过程到面向对象的转变中,总是以面向过程的思路思考,发现有很多的不同,今天就稍微发表一下我的见解,如果那里出错,希望大神可以帮忙指出来. 首先是const : 在C语法 ...

  7. Ubuntu Server 12.04安装图解教程

                                                                                                Ubuntu S ...

  8. Thinkphp5.0 在自己定义一个公共方法的控制器并且继承了Controller类的时候报错

    在建立网站的时候,你通常想着把一些共有的方法提取出来,放入一个控制器内,如果你是将业务逻辑写入了构造函数里面,那么就得注意了. 在thinkphp5.0当中,有一个初始化的方法,类似于构造函数,那就是 ...

  9. 【设计模式】module模式&&Revealing module (揭示)模式

    写在前面 <head first设计模式>里有一篇文章,是说使用模式的心智, 1.初学者"心智" :"我要为HELLO WORLD找个模式" 2.中 ...

  10. Maven 整合strut与Hibernate,获取不到Session

    struts使用的是2.3.24 Hibernate使用的5.0.7 注意hebernate一定要在struts之前申明,不然容易出现500错误, <project xmlns="ht ...