Problem C: Longest Common Subsequence
Sequence 1:
Sequence 2:
Given two sequences of characters, print thelength of the longest common subsequence of both sequences. Forexample, the longest common subsequence of the following twosequences:
abcdgh aedfhris adh of length 3.
Input consists of pairs of lines. The first line of a pair containsthe first string and the second line contains the second string. Eachstring is on a separate line and consists of at most 1,000 characters
For each subsequent pair of input lines, output a line containing oneinteger number which satisfies the criteria stated above.
Sample input
a1b2c3d4e zz1yy2xx3ww4vv abcdgh aedfhr abcdefghijklmnopqrstuvwxyz a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0 abcdefghijklmnzyxwvutsrqpo opqrstuvwxyzabcdefghijklmn
Output for the sample input
4 3 26 14
本题就是基本的最长公共子序列(注意数据,有空格)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
#define maxn 1005
#define inf 0x7ffffff
char arr[maxn];
char brr[maxn];
int dp[maxn][maxn];
int n;
int main()
{
while(gets(arr)){
gets(brr);
memset(dp,0,sizeof(dp));
int lena = strlen(arr);
int lenb = strlen(brr);
for(int i = 0; i < lena; i++){
for(int j = 0 ; j < lenb;j++){
if(arr[i] == brr[j]){
dp[i+1][j+1] = dp[i][j] + 1;
}else{
dp[i+1][j+1] = max(dp[i][j+1],dp[i+1][j]);
}
}
}
printf("%d\n",dp[lena][lenb]);
}
return 0;
}