动态规划中,我曾对于01背包和硬币问题有过一些理解,今天参考了博客上其他同学的经验,完成了最长公共子序列LCS的代码实现。具体的算法内容请移步我的另一篇博文:动态规划入门之:最长公共字符串LCS
代码使用C实现,本质上依赖于算法的两个核心:
1.状态转移方程
2.状态转移表(数组用来存放位置和长度)
上面都是摘自《算法导论》,如果熟悉这两个内容,那么实现起来就方便许多。代码如下:
/***最长公共子序列***/
/*动态规划*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#ifndef size_c
#define size_c 200
#endif // 预定义字符串的长度
#define EQUAL 1 //EQUAL表示c[i][j]是由c[i-1][j-1]+1来的=此时两个序列有相同的字符
#define UP 2 //UP表示c[i