UVA 1045 最长公共子序列
2024-08-28 23:27:17
题目描述:求最长公共子序列
若给定序列X={x1,x2,...,xm},另一序列Z={z1,z2,...,zk},是X的子序列是指存在一个严格递增的下标序列{i1,i2,...,ik}使得对所以j=1,2,...,k有zj=x(ij)
例如Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}
分析:DP的经典题
状态表示:d[i,j]记录序列x(i)和y(j)的最长公共子序列,其中x(i)={x1,x2,...,xi},y(j)={y1,y1,...,yj},原问题最优解为d[len1,len2]
转移方程:i=0或j=0时,d[i][j]=0;
xi=yj时,d[i][j]=d[i-1][j-1]+1;
xi != yj 时,d[i][j]=max( d[i-1][j],d[i][j-1] )
#include<cstdio>
#include<cstring>
int d[][];
int max(int a,int b)
{
return a>b ? a : b;
}
int main()
{
char rank1[],rank2[];
int i,j;
while(gets (rank1+))
{
gets(rank2+);
memset(d,,sizeof(d));
int len1=strlen(rank1+);
int len2=strlen(rank2+);
for(i=; i<=len1; i++)
for(j=; j<=len2; j++)
{
if(rank1[i]==rank2[j])
d[i][j]=d[i-][j-]+;
else
d[i][j]=max(d[i-][j],d[i][j-]);
}
printf("%d\n",d[len1][len2]);
}
return ;
}
最新文章
- Redis分布式集群几点说道
- 今天我们要说的画一个三角形,恩,画一个三角形,第一种呢是利用我们的html标签结合css来实现;而第二种方法就就是我们的html5新增的一个标签canves,这个canves就是网页画幕,那么顾名思义就是在网页里建造一个画板,用来画画,好,那接下来就和我一起去看看吧!
- Android获取ROOT权限
- C#-面向对象——如何调用使用类 普通方法、静态方法的使用
- 【EF 译文系列】重试执行策略的局限性(EF 版本至少为 6)
- iPhone和iPad版本的分辨率a
- 解决python3 不能引入setuptools
- 关键在封装并发出了帧-IP冲突也无所谓
- 【动态规划】【最短路】Codeforces 710E Generate a String
- skynet初学
- iOS9适配系列教程
- Java Object 构造方法的执行顺序
- logback配置文件详解
- 1014 Uniform Generator
- NSString类
- OJ周末题
- 在js中网页面写入数据时需要注意的几点
- 005 Numpy的基本操作
- 【Linux】深入理解Linux中内存管理
- APP-8-文本语音
热门文章
- 编译的时候出现";/usr/bin/ld: cannot find -lz
- JavaScript文件中; !function (win, undefined) {}(window);的意义
- Http中Content-Type的取值讲解
- 数组的includes方法
- 多线程06-Lock
- 使用Vue开发微信小程序:mpvue框架
- Python学习-第三天-面向对象编程基础
- redis-Nosql
- Python2视频教程
- powerdesigner数据库设计