问题描述
知识点
LCS、动态规划
实现
码前思考
- LCS要注意自己去模拟算法的实现,体会其中的思想!!!
实现代码
//典型的模板题
//数组下标从1开始
#include "bits/stdc++.h"
using namespace std;
//最长的长度
const int maxn = 110;
char A[maxn];
char B[maxn];
//dp数组
int dp[maxn][maxn];
int main(){
while(~(scanf("%s",A+1))){
scanf("%s",B+1);
int lenA = strlen(A+1);
int lenB = strlen(B+1);
//dp数组,dp数组的边界
for(int i=0;i<=lenA;i++){
dp[i][0] = 0;
}
for(int i=0;i<=lenB;i++){
dp[0][i] = 0;
}
//开始进行dp
for(int i=1;i<=lenA;i++){
for(int j=1;j<=lenB;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\n",dp[lenA][lenB]);
}
return 0;
}
码后思考
- 注意字符串数组的一些使用~