CSU-ACM2017暑期训练8-动态规划初步 C - Common Subsequence
2017-08-04 23:22
411 查看
C - Common Subsequence
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, x ij = 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.
Input
The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct.
Output
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.
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
状态转移方程
f(i,j)={f(i−1,j−1)+1max(f(i−1,j),f(i,j−1)),,a[i]=b[j]a[i]≠b[j]
#include <iostream> #include <cstdio> #include <algorithm> #include <string> #include <cstring> #include <vector> using namespace std; int dp[1000][1000]; int main(){ #ifdef TEST freopen("test.txt", "r", stdin); #endif // TEST string str1, str2; int len1, len2; while(cin >> str1 >> str2){ len1 = str1.length(), len2 = str2.length(); memset(dp, 0, sizeof(dp)); for(int i = 0; i < len1; i++){ for(int j = 0; j < len2; j++){ if(str1[i] == str2[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]); } } cout << dp[len1][len2] << endl; } return 0; }
相关文章推荐
- CSU-ACM2017暑期训练8-动态规划初步 D - Longest Ordered Subsequence
- CSU-ACM2017暑期训练8-动态规划初步 F - Boredom
- CSU-ACM2017暑期训练1-Debug与STL E - Train Problem I
- CSU-ACM2017暑期训练10-并查集&&HASH A-Virtual Friends HDU - 3172
- CSU-ACM2017暑期训练16-树状数组 G - KiKi's K-Number HDU - 2852
- CSU-ACM2017暑期训练3-递推与递归 J - Non-boring sequences
- CSU-ACM2017暑期训练4-dfs H- Square HDU - 1518
- CSU-ACM2017暑期训练7-模拟&&贪心 F - Sokoban
- CSU-ACM2017暑期训练7-模拟&&贪心 E - 荷马史诗 HYSBZ - 4198
- CSU-ACM2017暑期训练16-树状数组 H - Bubble Sort HDU - 5775
- CSU-ACM2017暑期训练1-Debug与STL hdu1022-Train Problem I
- CSU-ACM2017暑期训练3-递推与递归 G - 展开字符串 HDU - 1274
- Train Problem I CSU-ACM2017暑期训练1-Debug与STL
- CSU-ACM2017暑期训练5-三分 E - Line belt HDU - 3400
- CSU-ACM2017暑期训练14-最短路 D - 输入量很大的模板题
- CSU-ACM2017暑期训练1-Debug与STL -圆桌问题
- CSU-ACM2017暑期训练16-树状数组 A - Ultra-QuickSort POJ - 2299
- Languages--CSU-ACM2017暑期训练1-Debug与STL
- CSU-ACM2017暑期训练7-模拟&&贪心 A - Radar Installation POJ - 1328
- CSU-ACM2017暑期训练12-KMP D - 匹配