最長公共子序列
阿新 • • 發佈:2017-05-22
pac str 描述 pid scan div gre max ems
提交: 38 解決: 28
[提交][狀態][討論版]
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; }
最長公共子序列