hdu1159 题目要求两个字符串最长公共子序列,

状态转换方程   f[i][j]=f[i-1][j-1]+1; a[i]=b[j]时

       f[i][j]=MAX{f[i-1][j],f[i][j-1]}  a[i]!=b[j]时

f[i][j]记录a字符串 i 前子串 与 b字符串 j 前子串最长公共子序列  初始化后,自底向上,逐步求解 

动态规划的思想没有搞清楚,递归超时。。犯了很低级的错误

动态规划尽可能地减少重复运算,记忆化搜索很关键

正确代码:

#include<iostream>
#include<string>
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
char a[],b[];
int f[][];
int re;
int main()
{
int lena, lenb,i,j,re;
while(scanf("%s%s", a,b)!=EOF)
{
lena=strlen(a);
lenb=strlen(b);
for(i=; i<=lena; i++)
f[i][]=;
for(j=; j<=lenb; j++)
f[][j]=;
for(i=; i<=lena; i++)
for(j=;j<=lenb; j++)
if(a[i-]==b[j-])f[i][j]=f[i-][j-]+;
else
f[i][j]=MAX(f[i-][j],f[i][j-]);
cout<<f[lena][lenb]<<endl;
}return ;
}

递归超时代码贴在这里,给自己警示一下!!!!!!

#include<iostream>
#include<string>
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
string a,b;
int final(int la, int lb, int re)
{
if(la<0 || lb<0)return re;
if(a[la]==b[lb]) re=final(la-1,lb-1,re+1);
else
re=MAX(final(la-1,lb,re),final(la,lb-1,re)); return re;
}
int main()
{ int lena, lenb;
while(cin >> a >> b)
{
lena=a.length();
lenb= b.length();
cout<<final(lena-1,lenb-1,0)<<endl;
}return 0;
}

  先前wa了的代码,求测试数据,顺便贴过来,回来有空再回来瞅瞅。。现在有点乱了

#include<iostream>
#include<string>
#define find(c,n) find_first_of(c,n)
#define MAX(a,b) ((a)>(b)?(a):(b))
using namespace std;
int d[];
int re[];
int main()
{
string a,b;
int i,j,k,p,len,max,num[]; while(cin >> a >> b)
{
//cin >> a >> b;
memset(d,,sizeof(d));
memset(re,,sizeof(re));
memset(num,,sizeof(num));
len = b.length();
for (i=; i<len; i++)
//cout <<a.find_first_of(b[i],0)<<endl;
{
k=b[i]-'a';
p=a.find(b[i],num[k]);
if(p==string::npos)
d[i]=-;
else d[i]=p,num[k]=p+;
}
//for(i=0;i<len; i++)cout << d[i] << " ";cout <<endl;
for(i=;i<len; i++)if(d[i!=-])re[i]=;
for(i=; i<len; i++ )
{
if(d[i]==){re[i]=;continue;};
int f=;
for(j=i-;j>= ;j--)
if(d[i]>d[j])re[i]=MAX(re[i],re[j]+),f=;
if(!f)re[i]=; }
//for(i=0;i<len; i++)cout << re[i] << " ";cout <<endl;
max=re[];
for(i=; i<len; i++)
max=MAX(max,re[i]);
cout << max << endl;
}return ;
}

动态规划---最长公共子序列 hdu1159的更多相关文章

  1. LCS最长公共子序列HDU1159

    最近一直在学习算法,基本上都是在学习动态规划以及字符串.当然,两者交集最经典之一则是LCS问题. 首先LCS的问题基本上就是在字符串a,b之间找到最长的公共子序列,比如 YAOLONGBLOG 和 Y ...

  2. 动态规划 - 最长公共子序列(LCS)

    最长公共子序列也是动态规划中的一个经典问题. 有两个字符串 S1 和 S2,求一个最长公共子串,即求字符串 S3,它同时为 S1 和 S2 的子串,且要求它的长度最长,并确定这个长度.这个问题被我们称 ...

  3. 算法导论-动态规划(最长公共子序列问题LCS)-C++实现

    首先定义一个给定序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结果,其形式化定义如下:给定一个序列X = <x1,x2 ,..., xm>,另一个序列Z =<z1,z2  ...

  4. 动态规划 最长公共子序列 LCS,最长单独递增子序列,最长公共子串

    LCS:给出两个序列S1和S2,求出的这两个序列的最大公共部分S3就是就是S1和S2的最长公共子序列了.公共部分 必须是以相同的顺序出现,但是不必要是连续的. 选出最长公共子序列.对于长度为n的序列, ...

  5. 《算法导论》读书笔记之动态规划—最长公共子序列 & 最长公共子串(LCS)

    From:http://my.oschina.net/leejun2005/blog/117167 1.先科普下最长公共子序列 & 最长公共子串的区别: 找两个字符串的最长公共子串,这个子串要 ...

  6. 动态规划----最长公共子序列(LCS)问题

    题目: 求解两个字符串的最长公共子序列.如 AB34C 和 A1BC2   则最长公共子序列为 ABC. 思路分析:可以用dfs深搜,这里使用到了前面没有见到过的双重循环递归.也可以使用动态规划,在建 ...

  7. 动态规划———最长公共子序列(LCS)

    最长公共子序列+sdutoj2080改编: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/ ...

  8. 动态规划——最长公共子序列LCS及模板

    摘自 https://www.cnblogs.com/hapjin/p/5572483.html 这位大佬写的对理解DP也很有帮助,我就直接摘抄过来了,代码部分来自我做过的题 一,问题描述 给定两个字 ...

  9. 动态规划——最长公共子序列&&最长公共子串

      最长公共子序列(LCS)是一类典型的动归问题. 问题 给定两个序列(整数序列或者字符串)A和B,序列的子序列定义为从序列中按照索引单调增加的顺序取出若干个元素得到的新的序列,比如从序列A中取出 A ...

随机推荐

  1. jsp 嵌套iframe 从iframe中表单提交并传值到外层

    今天因需求迭代 更改元来代码 遇到了这么个问题 就是想在 iframe中提交后进行整个页面的跳转 并把iframe中的值传到外层jsp 大概就是这个样子 外层 a.jsp <div id=&qu ...

  2. jquery 实现复选框单选

    $(function() { $(':checkbox[name=复选框name值]').each(function() {  $(this).click(function() {   if ($(t ...

  3. Linq的简单查询

    Ling的简单查询,记在这里防止忘记,以便随时能够查看 List<int> intArr = new List<int>(); || i == select i; List&l ...

  4. Swift语言 1小时速学教程

    本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...

  5. sirius的学习笔记(3)

    毕业论文什么的终于搞完了,重拾我的python Creating the python skeleton project directory $ mkdir project $ cd project ...

  6. 自设chrome默认滚动条样式

    今天无聊,想着chrome这种全面使用html的浏览器,可不可以让我自行改变它的默认CSS呢,结果去查查,有,很好 win7/8目录为 C:\Users\[你的用户名]\AppData\Local\G ...

  7. 介绍.NET Core

    在connect (),我们宣布.NET 核心将能完全释放,作为开放源码软件.我也答应在.NET 核心跟更多的细节.在这篇文章,我将提供.NET 核心,我们如何去释放它,它涉及到.NET 框架,如何和 ...

  8. ORA-01033 ORA-01109 ORA-01034 ORA-12514 ORA-24324 ORA-01041 ORA-01157 ORA-01110

    客户数据库挂掉了 在plsql客户端使用普通账号登录时提示如下错误 因为好久没弄数据库了,慌了一小下. 接下来搜索过往的知识,回忆.在cli下输入了以下命令 sqlplus system/system ...

  9. 对指定文件生成数字摘要的MD5工具类

    md5特点:压缩性.不可逆性,经常用于传值过程中的值加密或文件加密static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', ...

  10. kill -9杀掉nginx主进程、reload失败解决办法

    前言: 无意间使用 kill -9 命令杀掉了nginx的主进程,当我再次使用 ./nginx -s reload 重新刷新nginx的时候,一直出现了下面的错误信息: nginx: [alert] ...