poj1845动态规划

最长公共子序列
状态转移方程为dp[i][j] = dp[i-1][j-1]+1 s1[i]==s[j]
= max{dp[i-1][j],dp[i][j-1]} s1[i]!=s2[j]

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
#define X 255
int dp[X][X];
string s1,s2;
int main()
{
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
while(cin>>s1>>s2)
{
memset(dp,0,sizeof(dp));
int len1 = s1.size();
int len2 = s2.size();
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
{
if(s1[i-1]==s2[j-1])
dp[i][j] = dp[i-1][j-1]+1;
else
dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
cout<<dp[len1][len2]<<endl;
}
return 0;
}

posted @ 2012-02-29 22:20  yejinru  阅读(115)  评论(0编辑  收藏  举报