dp[i][j]:i,j的位置上最长的子串
转移:相等时+1,不相等时max(dp[i-1][j],dp[i][j-1])
-
-
-
-
-
-
-
- #include<iostream>
- #include<cstring>
- #include <algorithm>
- #include<cstdlib>
- #include<vector>
- #include<cmath>
- #include<stdlib.h>
- #include<iomanip>
- #include<list>
- #include<deque>
- #include<map>
- #include <stdio.h>
- #include <queue>
-
- #define maxn 500+5
-
- #define inf 0x3f3f3f3f
- #define INF 0x3FFFFFFFFFFFFFFFLL
- #define rep(i,n) for(i=0;i<n;i++)
- #define reP(i,n) for(i=1;i<=n;i++)
-
- #define ull unsigned long long
- #define ll long long
-
- #define cle(a) memset(a,0,sizeof(a))
-
- using namespace std;
- char str[maxn],pat[maxn];
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("in.txt","r",stdin);
-
- #endif
- while(cin>>str>>pat)
- {
- int len1=strlen(str);int len2=strlen(pat);
- int i,j;int dp[maxn][maxn];cle(dp);
- for(i=1;i<=len1;i++)
- {
- for(j=1;j<=len2;j++)
- {
- if(str[i-1]==pat[j-1])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[len1][len2]);
- }
- return 0;
- }