最长子序列问题
2017-04-09 19:47
204 查看
题目描述
传说中,月老是掌管男女婚姻之神。每年七夕,七星娘娘会把人世间未婚的成年男女制成名册,向天庭呈报。月下老人收到名册后,按照个性、善恶、兴趣与条件抄写成一本配偶名册,然后用红线绑牢男女二人之足,使合适的男女配成一对佳偶。在一个古老的小镇,有一条古老的小河横穿这个镇南北,把这个小镇划分成东西两个部分。这个古老的小镇保留着一个古老的风俗,所有未婚男子都住在这条河的西岸上面,所有的未婚女子都住在这条河的东岸。
今年月下老人收到了这个小镇上所有未婚男女的名册,他把每个人的个性、善恶、兴趣与条件做了一个简单的汇总,给每个人添加了一个如A B C之类的标签,只有相同标签的男女才有可能用红线绑在一起。原本这个是个很简单的事情,但是现在问题是月老使用的红线,是不能互相交叉的,否则后果会很严重。所以月老为了更多人的幸福,他只能牺牲部分人的幸福。现在月老在纸上笔划了很久,还是没能比划出一个最好的方案,使得让最多对情侣终成眷属。您能帮帮他么?
输入
输入的文件的第一行包含两个整数N,M(0<N, M <= 1000),分别表示未婚男子和未婚女子的数目。第二行包含一个长度为N的字符串,字符串为大写字母A-Z和小写字母a-z组成,从北到南顺序表示每个男子的标签。
第三行包含一个长度为M的字符串,从北到南顺序顺序表示每个女子的标签。
输出
输出一个整数表示月老最多可以为多少对情侣成功牵线。样例输入
5 4ABACB
CBAB
样例输出
3#include #include #define N 1001 int c ; void DPLCSLength(char s1[], char s2[], int n, int m) { int i, j; for(i=1; i<=n; i++) c[i][0]=0; for(j=0; j<=m; j++) c[0][j]=0; for(i=1; i<=n; i++) for(j=1; j<=m; j++) if(s1[i-1]==s2[j-1]) c[i][j]=c[i-1][j-1]+1; else if(c[i-1][j]>=c[i][j-1]) c[i][j]=c[i-1][j]; else c[i][j]=c[i][j-1]; } int main() { int n,m,i,j; scanf("%d %d", &n, &m); getchar(); char s1 ,s2 ; gets(s1);gets(s2); DPLCSLength(s1,s2,n,m); printf("%d\n", c [m]); return 0; }
相关文章推荐
- 动态规划解最长子序列问题
- 动态规划之最长子序列问题
- nyoj 17 最长子序列相关问题
- 动态规划之最长子序列问题
- 用DP解决最长子序列问题
- hdu 1160 DP 最长子序列问题
- 最长子序列问题
- 最长子序列问题:简单的动规
- 最长子序列问题——动态规划算法初解
- 最长子序列回文问题,Longest Palindromic Subsequence
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
- 动态规划解决最长子序列问题
- 最长子序列相关问题
- 最长子序列问题(时间复杂度O(nlog(n))
- 合唱队(最长子序列问题)
- 最长子序列和问题
- 动态规划5:求解最多航线问题(应用了最长子序列知识)
- 【C语言】最长子序列问题求解
- 动态规划之LCS最长子序列问题
- 最长子序列问题