简单几步教你搞定LIS,LCS,LICS问题

LIS,LCS,LICS都是dp中的基础模型,

今天在复习最长公共上升子序列问题时将这三类问题简单总结了一下

LCS(最长公共子序列)

描述的是给定两个数列,求两数列中的最长公共子序列长度。

状态定义:

f (i, j) 为以数列a的前i个数以及数列b的前j个数组成的最长公共子序列长度

转移方程:

f(i, j) = f(i - 1,j - 1) + 1 (i, j > 0,a[i] == b[j])

f(i, j) = max(f (i - 1, j),f(i, j - 1) ) (i, j > 0, a[i] != b[j] );

LIS(最长上升子序列)

描述的是给定一个数列,求此数列中的最长上升子序列长度

状态定义:

f(j) 为以给定数列a[j]为结尾的最长上升子序列长度

转移方程:

f[j] = max f[j] + 1;(j < i,a[j] < a[i] )

LICS (最长公共上升子序列)

描述的是给定两个数列,求两数列中最长公共上升子序列的长度

状态定义:

f(i, j) 为 数列a的前i个元素 以及 数列 b 的 前j个元素 且以b[j]为结尾的LICS长度

t 为最长LICS的结尾元素位置

转移方程:

f[i][j] = f[i - 1][j] (a[i] != b[j])

f[i][j] = max(f[i - 1][j],f[i - 1][t] + 1) (a[i] == b[j])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值