hdu 1159 Common Subsequence (LCS)

来源:互联网 发布:淘宝裙子知乎 编辑:程序博客网 时间:2024/06/07 23:02
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. 
Input
abcfbc abfcabprogramming contest abcd mnp
Output
42

0

题目大意:给你两串字符,让你找他们的最大的公共子序列。输出这个值。

题目分析:应该是个LCS的模板题了,写的时候那个应该是当i==0&&j==0的时候没处理好,老是错,后来学

聪明了,从1开始循环,用i-1可以避免0的问题,输出dp【m】【n】。

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define maxn 1005using namespace std;char ch[maxn],sh[maxn];int dp[maxn][maxn];int main(){while((scanf("%s%s",ch,sh))!=EOF){int m=strlen(ch);int n=strlen(sh);memset(dp,0,sizeof(dp));for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){if(ch[i-1] == sh[j-1])  dp[i][j]=dp[i-1][j-1]+1;else    dp[i][j]=max(dp[i-1][j],dp[i][j-1]);}}   printf("%d\n",dp[m][n]);}return 0;}


0 0
原创粉丝点击