题目大意:
就是输入两个字符序列,输出两个序列的最长公共子序列(注意序列跟串的区别)。
题目类型:
经典dp /LCS
分析:
就是 最长公共子序列(LCS)的问题。d[i][j]表示a[i]之前、b[j]之前(含端点)的序列的最大子序列长度,
则状态转移方程:di,j = { di-1,j-1+1, 当a[i]=b[j]; max{di,j-1, di-1,j}, 当a[i]≠b[j]; }。
原问题的解就是 d(len(a)-1, len(b)-1) 了;
注:此题又很恶心,题目描述中没有说输入中有没有空格,结果用scanf WA了,换成gets 当场A了。注意咯。
总结:注意用scanf 读串的时候要小心, 注意与gets的区别!
代码: