POJ_3356_LCS
2010-05-09 10:10
127 查看
//============================================================================
// Name : POJ_3356_LCS.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : LCS的变形
// 如果匹配的话 dp[i][j] = min (dp[i-1][j-1], dp[i-1][j] + 1, dp[i][j-1] + 1);
// 否则:dp[i][j] = min (dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) + 1;
// 初始化:dp[0][i] = i; dp[i][0] = i;
//============================================================================
#include <iostream>
using namespace std;
int dp[2][1002];
int len1,len2;
char s1[1005],s2[1005];
int _LCS()
{
int current=0;
int i,j;
int max= len1>len1?len1:len2;
for(j = 0; j <= max;j++ )
{
dp[!current][j] = j;
dp[current][j] = 0;
}
for(i = 1; i <= len1; i++)
{
for(j = 1; j <= len2; j++)
{
if(j==1)
{
dp[current][j-1] = i;
dp[!current][j-1] = i-1;
}
if(dp[!current][j] < dp[current][j-1])
dp[current][j] = dp[!current][j]+1;
else
dp[current][j] = dp[current][j-1] +1 ;
if(s1[i] == s2[j] && dp[!current][j-1] < dp[current][j])
{
dp[current][j] = dp[!current][j-1];
}
else
{
if(dp[!current][j-1]+1 < dp[current][j] )
dp[current][j] = dp[!current][j-1] + 1;
}
//printf("%d ",dp[current][j]);
}
//printf("/n");
current = !current;
}
return dp[!current][j-1];
}
int main() {
freopen("in","r",stdin);
while(scanf("%d",&len1) != EOF )
{
if(len1)
scanf("%s",s1+1);
scanf("%d",&len2);
if(len2)
scanf("%s",s2+1);
if(len1 == 0 || len2 == 0)
{
printf("%d/n",len2+len1);
}else
{
printf("%d/n",_LCS());
}
}
return 0;
}
// Name : POJ_3356_LCS.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : LCS的变形
// 如果匹配的话 dp[i][j] = min (dp[i-1][j-1], dp[i-1][j] + 1, dp[i][j-1] + 1);
// 否则:dp[i][j] = min (dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) + 1;
// 初始化:dp[0][i] = i; dp[i][0] = i;
//============================================================================
#include <iostream>
using namespace std;
int dp[2][1002];
int len1,len2;
char s1[1005],s2[1005];
int _LCS()
{
int current=0;
int i,j;
int max= len1>len1?len1:len2;
for(j = 0; j <= max;j++ )
{
dp[!current][j] = j;
dp[current][j] = 0;
}
for(i = 1; i <= len1; i++)
{
for(j = 1; j <= len2; j++)
{
if(j==1)
{
dp[current][j-1] = i;
dp[!current][j-1] = i-1;
}
if(dp[!current][j] < dp[current][j-1])
dp[current][j] = dp[!current][j]+1;
else
dp[current][j] = dp[current][j-1] +1 ;
if(s1[i] == s2[j] && dp[!current][j-1] < dp[current][j])
{
dp[current][j] = dp[!current][j-1];
}
else
{
if(dp[!current][j-1]+1 < dp[current][j] )
dp[current][j] = dp[!current][j-1] + 1;
}
//printf("%d ",dp[current][j]);
}
//printf("/n");
current = !current;
}
return dp[!current][j-1];
}
int main() {
freopen("in","r",stdin);
while(scanf("%d",&len1) != EOF )
{
if(len1)
scanf("%s",s1+1);
scanf("%d",&len2);
if(len2)
scanf("%s",s2+1);
if(len1 == 0 || len2 == 0)
{
printf("%d/n",len2+len1);
}else
{
printf("%d/n",_LCS());
}
}
return 0;
}
相关文章推荐
- poj 3356 AGTC(lcs 变形题)
- Poj 3356 ACGT(LCS 或 带备忘的递归)
- Poj 3356 ACGT(LCS 或 带备忘的递归)
- poj 2250/3356 LCS(文章LCS/AGTC)
- poj 3356 文本编辑距离
- HDU1513 && POJ1159:Palindrome(LCS)
- POJ 1458 Common Subsequence (zoj 1733 ) LCS
- POJ 3356 AGTC(最小编辑距离)
- poj 3356
- POJ 1458 LCS 数组过小因编译器不同引发
- POJ 1080 Human Gene Functions[LCS]
- Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
- 最长公共子序列 LCS(模板) poj 1458
- Poj 2250 Compromise【LCS+路径输出】
- POJ 1458 Common Subsequence——LCS
- poj 2533 LCS
- POJ 1080 LCS扩展!
- POJ_3356——最短编辑距离,动态规划
- poj 1080 Human Gene Functions(lcs,较难)
- POJ 1458 Common Subsequence(LCS)