[NWPU][2014][TRN][6]动态规划第一讲——简单线性dp_C题
2014-07-22 16:42
155 查看
题目:
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, x ij = 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
题解:
确定状态:f[i][j]表示前一个字符串的前i位与后一个字符串的前j位的最长公共子序列长度;
状态转移方程: f[i][j]=f[i-1][j-1]+1 x[i]==y[j]; f[i][j]=max(f[i - 1][j] ,f[i][j - 1]) x[i]!=y[j]; 注意一下边界,这是做DP肯定要考虑的;代码:
#include<stdio.h> #include<string.h> int f[1003][1003]; int maxint(int a,int b) { return a>b?a:b; } int main() { char a[1003],b[1003]; int i,j,len1,len2; while(~scanf("%s %s",a,b)) { len1=strlen(a); len2=strlen(b); for(i=0;i<len1;i++) f[0][i]=0; for(j=0;j<len2;j++) f[j][0]=0; for(i=1;i<=len1;i++) for(j=1;j<=len2;j++) if(a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]+1; else f[i][j]=maxint(f[i-1][j],f[i][j-1]); printf("%d\n",f[len1][len2]); } return 0; }
相关文章推荐
- [NWPU][2014][TRN][6]动态规划第一讲——简单线性dp-D题
- [NWPU][2014][TRN][13]线段树第一讲 A - 基础 POJ 2352
- [NWPU][2014][TRN][13]线段树第一讲 B - 基础 POJ 3264
- uva 11584(动态规划起步第四天 线性DP)
- 震惊!单调队列优化DP竟如此简单——Monkey(原题:POI2014 Little Bird)
- POJ 1163 The Triangle (简单线性dp)
- Noip2013 Day2 T1 积木大赛(简单线性Dp)
- 7.12 [NWPU][2014][TRN][4]搜索 C - 广搜 基础
- [NWPU][2014][TRN][12]并查集D - A Bug's Life POJ 2492
- 2014蓝桥杯B组c/c++预赛 第九题地宫取宝 (四维线性dp)
- 【算法笔记】动态规划 线性DP
- [线性DP]合唱队形(NOIP2004)(LIS的简单应用)
- 动态规划_线性结构上的DP
- POJ-3624-Charm Bracelet-简单0/1背包、动态规划、DP
- POJ 1157动态规划简单DP
- [NWPU][2014][TRN][5]二分和贪心 M - 贪心 基础 POJ 2709
- 【算法笔记】动态规划 线性DP
- HDU1260 动态规划 简单DP
- UVA-11584 Partitioning by Palindromes (简单线性DP)
- 7.12 [NWPU][2014][TRN][3]搜索 POJ 1562 H - 深搜/广搜 基础