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

最优解的长度好找,两串的长度和-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. JQUERY选中问题

    单选,复选,下拉列表的全选选中问题 基本思路就是找到元素,操作元素,关于怎么找看jquery简介,主要学习记住具体操作用到的方法   复选框的全选以及设置选中问题:   jquery中提供prop方法 ...

  2. CentOS克隆机器步骤,图文教程

    在上一篇文章中,主要介绍了CentOS的装机步骤,这一篇文章主要介绍如何从一台装好的CentOS克隆出另一台机器,并且配置好网络. 首先被克隆的CentOS需要关机, 右键点击被克隆的CentOS-& ...

  3. Android 消息机制 (Handler、Message、Looper)

    综合:http://blog.csdn.net/dadoneo/article/details/7667726 与 http://android.tgbus.com/Android/androidne ...

  4. Azure ARM (17) 基于角色的访问控制 (Role Based Access Control, RBAC) - 自定义Role

    <Windows Azure Platform 系列文章目录> 在上面一篇博客中,笔者介绍了如何在RBAC里面,设置默认的Role. 这里笔者将介绍如何使用自定的Role. 主要内容有: ...

  5. 框架应用:Spring framework (四) - 事务管理

    事务控制 事务是什么?事务控制? 事务这个词最早是在数据库中进行应用,讲的用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位. 事务的管理是指一个事务的开启,内容添加, ...

  6. 使用apache反向代理tomacat

    起源 在大部分的生产环境中,基本上使用的都是java程序,从而促进了各种应用程序中间件的产生,在这里大概有几种,tomcat作为最著名的开源servlet容器,jboss也是开源的,而且有管理界面,主 ...

  7. appium python andiroid自动化文档整理笔记

    from appium import webdriver import time,unittest,HTMLTestRunner class Testlogin(unittest.TestCase): ...

  8. 编号中的数学_KEY

    题目描述: 从美国州际高速公路建筑者那里,奶牛们引进了一种路径编号系统,来给牧场之间的道 路编号.他们已经把 N(1<=N<=25)个牧场,用 1 到 N 的整数编号.现在他们需要将牧场间 ...

  9. 树状数组初步_ZERO

    原博客:树状数组 1 一维树状数组 1 什么是树状数组        树状数组是一个查询和修改复杂度都为log(n)的数据结构,假设数组A[1..n],那么查询A[1]+-+A[n]的时,间是log级 ...

  10. VS2015 + EF6连接MYSQL

    ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,不仅支持SQL Server,还支持MySQL.Ora ...