PKU1458 最长公共字串 DP
2010-08-18 09:46
375 查看
Common Subsequence
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
DP
的经典应用
:
求最长公共字串
.
转移方程
:
(res[i][j]:
表示
stringa
的前
i
个字符和
stringb
的前
j
个字符的最长公共字串长度
)
res[i][j]=0
(i==0||j==0)
res[i][j]=res[i-1][j-1]+1
(stringa[i]==stringb[j])
res[i][j]=max(res[i][j-1],res[i-1][j])
(stringa[i]!=stringb[j])
代码如下
:
Time Limit: 1000MS | | Memory Limit: 10000K |
Total Submissions: 20435 | | Accepted: 7752 |
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
DP
的经典应用
:
求最长公共字串
.
转移方程
:
(res[i][j]:
表示
stringa
的前
i
个字符和
stringb
的前
j
个字符的最长公共字串长度
)
res[i][j]=0
(i==0||j==0)
res[i][j]=res[i-1][j-1]+1
(stringa[i]==stringb[j])
res[i][j]=max(res[i][j-1],res[i-1][j])
(stringa[i]!=stringb[j])
代码如下
:
#include<stdio.h> #include<string.h> #define MAXN 1005 int main() { int i,j,la,lb,res[MAXN][MAXN];char a[MAXN],b[MAXN]; while (scanf("%s%s",a,b)!=EOF) { memset(res,0,sizeof(res)); la=strlen(a);lb=strlen(b); for (i=0;i<la;++i) for (j=0;j<lb;++j) if (a[i]==b[j]) res[i+1][j+1]=res[i][j]+1; else res[i+1][j+1]=res[i][j+1]>res[i+1][j]?res[i][j+1]:res[i+1][j]; printf("%d/n",res[la][lb]); } return 0; }
相关文章推荐
- PKU1080 最长公共字串 DP
- PKU2250 最长公共字串 DP
- DP---最长公共子序列&最长公共字串
- poj1458(DP最长连续公共子序列)
- 最长公共字串(dp)
- (Relax DP1.5)POJ 1458 Common Subsequence(使用dp来求解最长公共子串)
- PKU 3974 - Palindrome (最长回文字串 DP)
- 解题报告PKU1159 最长公共字串 回文串 DP
- dp——求最长公共子串
- POJ 2774 (后缀数组 最长公共字串) Long Long Message
- hdu4681(最长公共子串+DP)
- 最长公共字串和最长公共子序列
- 最长公共上升子序列的DP解法及其优化
- 公共字串计算(最长公共子串/序列)C++
- PKU 2774(后缀数组求最长公共子串)
- Codeforces 10D LCIS 求最长公共上升子序列及输出这个子序列 dp
- poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)
- nyoj 36 最长公共子序列 dp问题最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共
- 最长公共字串与最长公共子序列
- 求两个字符串最长公共字串