poj1458(DP最长连续公共子序列)
2013-05-30 10:57
316 查看
记住动态方程就好了。。
还一个问题就是这题的dp[][]数组不能开太大我一直开的是dp[1010][1010]一直WA就是不知道原因,把这个问题改成dp[1010][101]就行了。。无语。。
#include<stdio.h>
#include<string.h>
char s1[1010],s2[1010];
int dp[1010][101];
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
while(scanf("%s %s",s1,s2)!=EOF)
{
int a,b;
a=strlen(s1);
b=strlen(s2);
int i,j;
memset(dp,0,sizeof(dp));
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
if(s1[i]==s2[j])
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[a-1][b-1]);
}
return 0;
}
还一个问题就是这题的dp[][]数组不能开太大我一直开的是dp[1010][1010]一直WA就是不知道原因,把这个问题改成dp[1010][101]就行了。。无语。。
#include<stdio.h>
#include<string.h>
char s1[1010],s2[1010];
int dp[1010][101];
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
while(scanf("%s %s",s1,s2)!=EOF)
{
int a,b;
a=strlen(s1);
b=strlen(s2);
int i,j;
memset(dp,0,sizeof(dp));
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
if(s1[i]==s2[j])
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[a-1][b-1]);
}
return 0;
}
相关文章推荐
- Common Subsequence - POJ 1458 最长非连续公共子序列
- POJ2479 Maximum sum 最长连续子序列[DP]
- POJ2479 Maximum sum 最长连续子序列[DP]
- POJ 3080 Blue Jeans(KMP:最长连续公共子序列)
- Poj 1458 Common Subsequence 最长非连续序列
- dpPOJ 2027 LCIS(最长上升公共子序列)
- (Relax DP1.5)POJ 1458 Common Subsequence(使用dp来求解最长公共子串)
- POJ 3450 Corporate Identity(KMP:最长连续公共子序列)
- 2018.1.30【 POJ - 1458 】解题报告(dp,最长相同子序列)
- [dp](不连续)最大公共上升子序列 POJ 2127
- 求最长连续公共子序列 POJ 3080
- 【简单dp】poj 2127 Greatest Common Increasing Subsequence【最长公共上升子序列】【模板】
- 最长公共子序列 最长递增子序列(和) 最长递增公共子序列 最长(连续)子序列乘积(HDU)--dp
- POJ (dp最长上升子序列问题)
- 如何求最长连续公共子序列和最长连续子字符串
- 如何求最长连续公共子序列和最长连续子字符串
- 最长连续公共子序列
- poj 2127 zoj 2432 codeforces 10D 最长上升公共子序列
- POJ 1458 && HDU 1159 Common Subsequence (最長公共子序列)dp
- POJ 1836 Alignment 最长上升(下降)子序列(dp)