中科院卜东波算法课第三题作业(dp)oj总结

(开篇必读,我是个菜鸡,所以思考的问题都是属于比较低端的,大佬请直接关闭此页)

说在之前我真的菜,乃至于明显很简单的两道题我写了15个小时左右,我是真的菜,而且我现在很生自己的气。正常人自己手打代码估计是20分钟+20分钟,一个小时就能搞定。为什么花这么久的时间,因为我“探索”了很久,现将问题总结,并期待下一次不要遇到相同的问题。(下面两)

1、lcs最大公共子序列

卜老师介绍了一种算法

我没有拿正常打dp表的方式来做这道题,而采取了老师讲述的那种方法,这就是噩梦的来源。 

1、伪代码第二行的理解:

  1. matches(k+1)=(m+1,n+1)

    有k个匹配为什么要搞一个k+1,于是我写代码的时候华丽的忽视了这一句,导致错误。我们需要注意到,matches的添加方式和之后的读取方式,对!一行一行顺序读取,那么我们假设越到最后opt越大(由于每一次都取之前表里的最大值)肯定是递增的,那么最后输出的结果就是opt[l1][l2]。假如bdad和abd那么最后一对是处在3的a和处在1的a,那么最后一个得到的opt的值是1。所以要加一个k+1行的,即统计上面所有的最大值,最后输出的时候k-1即可。

    for(int i = 0;i < l1; i++){
        for(int j = 0;j < l2; j++){
            if (S[i] == T[j]){
                matches[matches_index] = make_pair(i,j);
                matches_index++;
            }
      
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值