poj 1458 Common Subsequence

来源:互联网 发布:淘宝宝贝描述软件 编辑:程序博客网 时间:2024/06/11 23:41

分类:dp 难度:1

 

题意:求两字符串的最长公共字串。

a[i]==b[j],dp[i][j] = dp[i-1][j-1]+1,,否则 dp[i][j] = MAX(dp[i-1][j],dp[i][j-1])

#include<cstdio>#include<cstring>#include<iostream>#include<string>#define MAX(x,y) (x)>(y)?(x):(y)using namespace std;const int N=510;int dp[N][N];string a,b;int cal(int i,int j){if(i<0 || j<0) return 0;if(dp[i][j]>=0) return dp[i][j];if(a[i]==b[j]) dp[i][j] = cal(i-1,j-1)+1;else dp[i][j] = MAX(cal(i-1,j),cal(i,j-1));return dp[i][j];}int main(){while(cin>>a>>b){memset(dp,-1,sizeof(dp));int la=a.length(),lb=b.length();int i,j;int ans=0;ans = cal(la-1,lb-1);printf("%d\n",ans);}}


 

原创粉丝点击