博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP动态规划——hdu 1008 Common Subsequence(最长公共子序列)
阅读量:6170 次
发布时间:2019-06-21

本文共 1920 字,大约阅读时间需要 6 分钟。

http://acm.hdu.edu.cn/showproblem.php?pid=1159

 

 

              Common Subsequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 13471    Accepted Submission(s): 5534
Problem Description
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk> is a subsequence of X if there exists a strictly increasing sequence <i1, i2, ..., ik> of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = <a, b, f, c> is a subsequence of X = <a, b, c, f, b, c> with index sequence <1, 2, 4, 6>. Given two sequences X and Y the problem is to find the length of the maximum-length common subsequence of X and Y.
The program input is from a text file. Each data set in the file contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct. For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
 
Sample Input
 
abcfbc abfcab programming contest abcd mnp
 
Sample Output
 
4 2 0

 又是一个dp问题。

找到其动态方程,程序就出来了一大半了。我做dp 问题的时候习惯的画一个表格。

 

a

b

f

c

a

b

a

1

1

1

1

1

1

b

1

2

2

2

2

2

c

1

2

2

3

3

3

f

1

2

3

3

3

3

b

1

2

3

3

3

4

c

1

2

3

4

4

4

有了这个 dp 方程就好理解了:

当   a[ i ] ==b[ i ]    时: dp[ i ][ j ]=dp[ i-1 ][ j-1 ]  +1;

当   a[ i ] !=b[ i ]     时:  max( dp[ i-1 ][ j ] , dp[ i ][ j-1 ] ).

下面就是代码了:

#include
#include
using namespace std;#define M 505#define max(a,b) a>b?a:bint dp[M][M];int main(){ int lena,lenb,i,j; char a[M],b[M]; for(i=0;i
>a+1>>b+1) //从 a[1],b[1] 开始输入 { lena=strlen(a)-1; lenb=strlen(b)-1; for(i=1;i<=lena;i++) { for(j=1;j<=lenb;j++) { if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } cout<
<

转载地址:http://davba.baihongyu.com/

你可能感兴趣的文章
springcloud--Feign(WebService客户端)
查看>>
网络攻击
查看>>
sorting, two pointers(cf div.3 1113)
查看>>
Scala并发编程【消息机制】
查看>>
win10下安装Oracle 11g 32位客户端遇到INS-13001环境不满足最低要求
查看>>
AngularJS-01.AngularJS,Module,Controller,scope
查看>>
【MySQL 安装过程1】顺利安装MySQL完整过程
查看>>
Inno Setup入门(二十)——Inno Setup类参考(6)
查看>>
图片自适应
查看>>
amd cmd
查看>>
Linux下的uml画图工具
查看>>
xml返回数组数据
查看>>
约瑟夫问题总结
查看>>
spring mybatis 批量插入返回主键
查看>>
指针函数小用
查看>>
开源力量公开课第二十三期-从SVN到Git,次时代代码管理
查看>>
输入挂
查看>>
升级迁移前,存储过程统计各个用户下表的数据量,和迁移后的比对
查看>>
sql注入分类
查看>>
初识CSS选择器版本4
查看>>