HDU 1159 Common Subsequence(还是DP)

来源:互联网 发布:产品过程特性矩阵图 编辑:程序博客网 时间:2024/05/16 07:40

给出两个字符串,求出他们最大的 Common Subsequence。所谓字符串A的 subsequence,就是A所含的字符的一部分或者全部组成的字符串,并且字符的顺序和A中出现的顺序相同。

用f [ i ][ j ]表示处理到字符串A的第 i 位 和 字符串B第 j 位时的最大值。

f [ i ][ j ] = f[ i - 1 ][ j - 1 ] + 1  (A[ i ] == B[ j ])

f [ i ][ j ] = max( f[ i - 1 ][ j ], f [ i ][ j - 1] )    (A[ i ] != B[ j ])

#include<string>#include<algorithm>#include<iostream>#include<cstdio>using namespace std;int dp[4000][4000];int main(){string s1, s2;while(cin >> s1 >> s2){for(int i = 1; i <= s1.size(); i++)for(int j = 1; j <= s2.size(); j++){if(s1[i - 1] == s2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;elsedp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);}printf("%d\n", dp[s1.size()][s2.size()]);}}


原创粉丝点击