[HEOI2015]最短不公共子串

最短不公共子串

题解

不明白那个出题人无聊到把四个问题放到一个问题中。

不过出题人既然这样做了,我们就分四个问题来讨论吧。
反正四个都是dp

Problem 1st

应该是一个很容易想到的dp
容易发现,最短不公共子序列的长度就是最短的无法继续向后延伸的公共子序列的长度。
后者可以通过简单dp求出。
d p i , j dp_{i,j} dpi,j表示 a a a串以第 i i i个字符结尾, b b b串以第 j j j个字符结尾的最长公共子序列长度。
易得状态转移方程式:
d p i , j = d p i − 1 , j − 1 + 1      ( a i = b j ) dp_{i,j}=dp_{i-1,j-1}+1\, \, \, \, (a_{i}=b_{j}) dpi,j=dpi1,j1+1(ai=bj)
跑一遍就完了,时间复杂度 ( n 2 ) \left(n^2\right) (n2)

Problem 2nd

其实与上一小问的做法差不多,只需要将状态方程改改即可。
状态转移方程式变为:
d p i , j = d p i − 1 , j − 1 + 1      ( a i = b j ) dp_{i,j}=dp_{i-1,j-1}+1\, \, \, \, (a_{i} = b_{j}) dpi,j=dpi1,j1+1(ai=bj)
d p i , j = d p i , j − 1      ( a i

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值