动态规划 状态转移方程为
dp[i][j] = 0(当i为0或者j为0)
dp[i][j] = dp[i-1][j-1]+1(当a[i] == b[j])
dp[i][j] = max{dp[j-1][i],dp[j][i-1]}
但是如果开了dp[1000][1000]内存肯定不够用
观察方程 其实每一个状态[i][j]只能由[i-1][j-1],
[j-1][i],dp[j][i-1] 所以只用4个数保存就可以了
题目如下,只给了80k内存
求最长公共子序列的长度
时间限制:1000 ms | 内存限制:80 KB
描述
给定两个字符串,要求统计两个字符串的最长公共子序列的长度。
要求:尽量节省空间。
输入
第一行一个整数T ,表示有T组测试数据:
对于每组测试数据,有两行,即两个字符串(长度小于等于1000,只由小写字母组成)。
输出
对于每组测试数据:输出一行,即最长公共子序列的长度。
样例输入
1 god good
样例输出
3
但是还要用个数组保存每一行的结果