题目描述:输入两个序列,输出它们的最长公共子序列
状态转移方程
A[i] = B[j], dp[i][j] = dp[i -1][j - 1] A[i] != B[j], dp[i][j] = max(d[i - 1][j], d[i][j - 1]) + 1
本来挺简单一段代码的,因为我DP数组定义在main里面导致一直段错误,直接报错,懵了个逼
代码
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn = 110;int main(){char A[maxn] = "sadstory", B[maxn] = "adminstory";int dp[maxn][maxn] = {0};int len_A = strlen(A + 1);int len_B = strlen(B + 1);for(int i = 0; i < max(len_A, len_B); i++){dp[i][0] = dp[0][i] = 0;}for(int i = 1; i <= len_A; i++){for(int j = 1; j <= len_B; j++){if(A[i] == B[j]) dp[i][j] = dp[i - 1][j - 1] + 1;else {dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}printf("%d", dp[len_A][len_B]);return 0;}
