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. centOS 多网卡 启动网络 eth0 does not to be present

    centOS 6.4 中 em1 就是eth0... ---------------------------------------- http://www.php-oa.com/2012/03/07 ...

  2. Makefile隐含规则和用到的默认变量

    如果要使用隐含规则生成你需要的目标,你所需要做的就是不要写出这个目标的规则.那么,make会试图去自动推导产生这个目标的规则和命令,如果make可以自动推导生成这个目标的规则和命令,那么这个行为就是隐 ...

  3. 多核处理器基础SMP&AMP&BMP

    多核处理器也称片上多核处理器(Chip Multi-Processor,CMP). 1.多核处理器的流行 多核出现前,商业化处理器都致力于单核处理器的发展,其性能已经发挥到极致,仅仅提高单核芯片的速度 ...

  4. js事件流、事件处理程序/事件侦听器

    1.事件流 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档). 事件捕获 ...

  5. 在Yii2.0中实现计划任务(cron)

    以下由我们在信易网络公司开发项目的时候终结出的一些经验 Create console application 创建命令行应用 In advance template there is already ...

  6. Mysql修改设置root密码的命令及方法

    方法一:使用SQL语句命令UPDATE 需用到Mysql自带的加密函数PASSWORD(string),该函数对一个明文密码进行加密,但不能解密.专门用于mysql.user(用户权限表)中设置密码, ...

  7. 又一家自适应学习平台上线,大讲台主攻IT在线教育

    自适应学习技术自2015年以内,越来越受到在线教育公司的关注和重视,极客学院创始人靳岩7月初在接受媒体采访时曾提到,百万用户只是极客学院的第一步,下一步的目标是自适应学习.靳岩认为,自适应学习代表未来 ...

  8. Array 原型扩展(快速排序,搅乱顺序)

    /// 快速快速排序算法Array.prototype.quickSort = function (left, right) { // left = left || 0; // right = rig ...

  9. nutch 很多url unfetched的原因

    bin/hadoop jar apache-nutch-1.7.job org.apache.nutch.crawl.CrawlDbReader crawl/crawldb -stats -sort ...

  10. bzoj 2482: [Spoj GSS2] Can you answer these queries II 线段树

    2482: [Spoj1557] Can you answer these queries II Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 145 ...