就是板子,没什么可说的,我就再来回顾一下,看有什么新收获,所谓dp,就是带入前面数据的分段处理
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; const int maxn=1000+10; int dp[maxn][maxn]; string a,b; int main() { while(cin >> a >> b) { memset(dp,0,sizeof(dp)); for(int i=0;i<a.length();i++) for(int j=0;j<b.length();j++) { if(a[i]==b[j]) dp[i+1][j+1]=dp[i][j]+1;//这里的dp[i+1][j+1]对应a[i]和b[i],不用dp[i][j]对应,因为不存在dp[-1][-1]=0 else dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]); } printf("%d\n",dp[a.length()][b.length()]); } return 0; }