NOI 1808:公共子序列(C++) 动态规划

该博客介绍了如何使用C++通过动态规划方法解决NOI题目——找出两个字符串的最长公共子序列长度。文章详细阐述了动态规划的思路,通过二维数组C[][]存储子问题,并逐步更新求解最终答案。
摘要由CSDN通过智能技术生成

题目地址:

http://noi.openjudge.cn/ch0206/1808/

题目:

求两个字符串的最长公共子序列长度

思路:

采用动态规划的方法,用二维数组C[][]来保存子问题(C[i][j]存储子序列长度为i的L1[0...i-1],长度为j的L2[0...j-1]的LCS长度),然后两层循环自底向上不断更新C,直至找到C[L1.size()][L2.size()],即找到我们的解。
更新方法:


#include "iostream"
#include "vector"
using namespace std;
#define L1LENGTH 201
#define L2LENGTH 201
/*
 * C[i][j]存储子序列长度为i的L1[0...i-1],长度为j的L2[0...j-1]的LCS长度
 *           0                          j=0||i=0
 * C[i][j] = C[i-1][j-1]+1              Xi = Yi
 *           max(C[i-1][j],C[i][j-1])   Xi != Yi
 */
int C[L1LENGTH][L2LENGTH];
//int B[L1LENGTH][L2LENGTH];
void LCSLength(string X,string Y,in
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值