【北大夏令营笔记-动态规划】poj1458-Common Subsequence
2014-07-17 20:57
218 查看
Common Subsequence
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 37543 Accepted: 15016
Description
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another sequence Z = < z1, z2, ..., zk > is a subsequence of X if there exists a strictly increasing sequence < i1,
i2, ..., ik > of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = < a, b, f, c > is a subsequence of X = < a, b, c, f, b, c > with index sequence < 1, 2, 4, 6 >. Given two sequences X and Y the problem is to find the length of the maximum-length
common subsequence of X and Y.
Input
The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct.
Output
For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0
Source
Southeastern
Europe 2003
//题意:最长公共子序列
/*
输入两个串s1,s2.设MaxLen[i][j]表示:
s1的左边i个字符形成的子串,与s2左边的j个字符形成的子串的最长公共子
序列的长度(i,j从0开始计算)。
MaxLen[i][j]就是本题的“状态”。
*/
AC代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=1100;
char s1[MAXN];
char s2[MAXN];
int MaxLen[MAXN][MAXN];
int main()
{
int i,j,n,m;
while(scanf("%s %s",s1,s2)!=EOF)
{
n=strlen(s1);
m=strlen(s2);
for(i=0;i<=n;i++)
MaxLen[i][0]=0;
for(i=0;i<=m;i++)
MaxLen[0][i]=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(s1[i-1]==s2[j-1])
MaxLen[i][j]=MaxLen[i-1][j-1]+1;
else
MaxLen[i][j]=max(MaxLen[i][j-1],MaxLen[i-1][j]);
}
printf("%d\n",MaxLen
[m]);
}
return 0;
}
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 37543 Accepted: 15016
Description
A subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another sequence Z = < z1, z2, ..., zk > is a subsequence of X if there exists a strictly increasing sequence < i1,
i2, ..., ik > of indices of X such that for all j = 1,2,...,k, xij = zj. For example, Z = < a, b, f, c > is a subsequence of X = < a, b, c, f, b, c > with index sequence < 1, 2, 4, 6 >. Given two sequences X and Y the problem is to find the length of the maximum-length
common subsequence of X and Y.
Input
The program input is from the std input. Each data set in the input contains two strings representing the given sequences. The sequences are separated by any number of white spaces. The input data are correct.
Output
For each set of data the program prints on the standard output the length of the maximum-length common subsequence from the beginning of a separate line.
Sample Input
abcfbc abfcab
programming contest
abcd mnp
Sample Output
4
2
0
Source
Southeastern
Europe 2003
//题意:最长公共子序列
/*
输入两个串s1,s2.设MaxLen[i][j]表示:
s1的左边i个字符形成的子串,与s2左边的j个字符形成的子串的最长公共子
序列的长度(i,j从0开始计算)。
MaxLen[i][j]就是本题的“状态”。
*/
AC代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int MAXN=1100;
char s1[MAXN];
char s2[MAXN];
int MaxLen[MAXN][MAXN];
int main()
{
int i,j,n,m;
while(scanf("%s %s",s1,s2)!=EOF)
{
n=strlen(s1);
m=strlen(s2);
for(i=0;i<=n;i++)
MaxLen[i][0]=0;
for(i=0;i<=m;i++)
MaxLen[0][i]=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(s1[i-1]==s2[j-1])
MaxLen[i][j]=MaxLen[i-1][j-1]+1;
else
MaxLen[i][j]=max(MaxLen[i][j-1],MaxLen[i-1][j]);
}
printf("%d\n",MaxLen
[m]);
}
return 0;
}
相关文章推荐
- 【北大夏令营笔记-动态规划】百练2757-最长上升子序列
- 【北大夏令营笔记-动态规划】百练2755:神奇的口袋
- 0013算法笔记——【动态规划】最大子段和问题,最大子矩阵和问题,最大m子段和问题
- 基础算法学习笔记(二)----动态规划
- 0011算法笔记——【动态规划】最长公共子序列问题(LCS)
- 0018算法笔记——【动态规划】流水作业调度问题与Johnson法则
- LeetCode 笔记系列 20 Interleaving String [动态规划的抽象]
- 0019算法笔记——【动态规划】0-1背包问题
- 0012算法笔记——【动态规划】最长公共子串问题
- 0015算法笔记——【动态规划】多边形游戏问题
- 0017算法笔记——【动态规划】电路布线问题
- 算法导论学习笔记-第十五章-动态规划
- 算法笔记(问题分解,分治与动态规划)
- 动态规划学习笔记2(最长公共子序列)
- 0010算法笔记——【动态规划】矩阵连乘问题
- 【动态规划】poj1458 common subsequence
- 【笔记】【算法学习】【动态规划】背包问题总结(1)
- 算法笔记(问题分解,分治与动态规划)
- 算法导论学习笔记(十二):动态规划(二):最长公共子序列(LCS)
- 算法学习笔记----用动态规划解决钢管切割问题