1. 程式人生 > >最長公共子序列

最長公共子序列

pac str 描述 pid scan div gre max ems

1619: P1050

時間限制: 1 Sec 內存限制: 128 MB
提交: 38 解決: 28
[提交][狀態][討論版]

題目描述

一個字符串A的子串被定義成從A中順次選出若幹個字符構成的串。如A=“cdaad" ,順次選1,3,5個字符就構成子串" cad" ,現給定兩個字符串,求它們的最長共公子串。

輸入

第一行兩個字符串用空格分開。

輸出

最長子串的長度。

樣例輸入

abccd aecd

樣例輸出

3

提示

兩個串的長度均小於2000

DP水題,不解釋

#include<iostream>
#include<cstdio>
#include
<algorithm> #include<cstring> using namespace std; int f[2005][2005]; int main() { char char1[2005],char2[2005]; scanf("%s %s",char1+1,char2+1); for(int i=1;i<=strlen(char1+1);i++) for(int j=1;j<=strlen(char2+1);j++) { if(char1[i]==char2[j]) f[i][j]
=f[i-1][j-1]+1;else f[i][j]=max(f[i-1][j],f[i][j-1]); } cout<<f[strlen(char1+1)][strlen(char2+1)]<<endl; }

最長公共子序列