您的位置:首页 > 其它

poj1458 dp

2014-11-20 19:07 330 查看
如题:http://poj.org/problem?id=1458



求最长公共升序子序列



dp[i][j]表示第一个串到i的子串和第二个子串到j的子串拥有的公共子序列的长度。

如果str1【i】=str2【j】,d[i][j]=d[i-1][j-1]+1;

否则d[i][j]=max(d[i][j-1],d[i-1][j]).





#include<cstdio>

#include<iostream>

#include<string>

using namespace std;

#define N 1001

int dp

={0};

int max(int x,int y)

{return x>y?x:y;}

int main()

{

string str1,str2;

int i,j;

while(cin>>str1>>str2)

{

memset(dp,0,sizeof(dp));

int len1=str1.length();

int len2=str2.length();

for(i=1;i<=len1;i++)

for(j=1;j<=len2;j++)

{

if(str1[i-1]==str2[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]);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: