poj 3356 AGTC

题意:给你了两个基因字符串,问最少经过多少次一下的操作可以使他们匹配:

  • Deletion: a letter in x is missing in y at a corresponding position. //删除
  • Insertion: a letter in y is missing in x at a corresponding position. //插入
  • Change: letters at corresponding positions are distinct//改变
  • 其中删除和插入可以归结为一种运算 在字符串中如果添加一个能够达到最小等同于另外一个字符串删除一个。

    解题思路:首先这道题目想到的就是dp,然后discuss里面有用两个串的公共子序列LCS求出的,而且还是

    AC了的 但是这种思路是错误的。

    例如:ATG TGC 答案是 2  但是 按照上面的求法结果为1.

    该题目的算法:也是dp。dp[i][j] 表示第一个字符串的前i个与第二个字符串的前j个匹配最少要经过多少次的操作。

    每一个字符的比较就只有匹配或者不匹配。

    用递归的思路来讲:最后一个字符只有匹配或者不匹配

    所以匹配时:dp[n][m] = min(dp[n-1][m],dp[n][m-1],dp[n-1][m-1]),

    不匹配时:dp[n][m] = min(dp[n-1][m],dp[n][m-1],dp[n-1][m-1])+1.

    对我来说dp的递归思路比正向的容易理解些,,囧。。。注意dp的初始化。

    代码:

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值