题目大意:
求最长公共子序列长度。
最长公共子序列的定义是 如abcde和dbada的最长公共字串为bd 或者 ad。
思路:
动态规划的问题 当前字符串能匹配到的长度。
ac代码:
- #include <stdio.h>
- #include<iostream>
- #include<cstdio>
- #include<string.h>
- #include<algorithm>
- using namespace std;
- int dp[1005][1005];
- int main()
- {
- int n,i,j;
- // freopen("r.txt","r",stdin);
- string s1,s2;
- char arr[1005];
- while(~scanf("%s",arr))
- {
- s1=arr;
- scanf("%s",arr);
- s2=arr;
- memset(dp,0,sizeof(dp));
- for(i=0;i<s1.length();i++)
- {
- for(j=0;j<s2.length();j++)
- {
- if(s1[i]==s2[j])
- {
- dp[i+1][j+1]=dp[i][j]+1;
- }
- else
- {
- dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
- }
- }
- }
- cout<<dp[s1.length()][s2.length()]<<endl;
- }
- }