POJ 1159解题报告

本文深入讲解了最长公共子序列(LCS)算法的基本原理及其实现过程,通过具体实例演示了如何利用LCS算法确定两个序列间的最长相同子序列,并以此为基础计算所需的最小插入操作数。文中提供了一段清晰易懂的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要求插入最小数 那么求出最长公共子序列后N-最长公共子序列就是需要插入的最小数了 ,DP之LCS基础题 刚开始不会 想了好久没想出来 后来问志权 志权迅速画个LCS的图解析下就有点顿悟(看来有时侯站在巨人的肩膀上能让学习效率更加高啊!)LCS原理 设个二维数组 分为横列坐标,横坐标依次下去的是顺序列。纵坐标 从左到右是反序列。那么用

for(i=0;i<n;i++)

     for(j=0;j<n;j++)

遇到相等的tag[i][j]=tag[i-1][j-1]+;

不相等就tag[i][j]=max(tag[i-1][j],tag[i][j-1]);这样看比较抽象 画个图出来用例子去画一下就好明白很多了。。

我是J从最后一个元素开始回到0比较的 那样不用求反序列了。还有 这题数组下标从1开始ud好点 因为要用到i-1,j-1如果从0开始会越界数据不对 因为这样WA了很久 。代码:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值