最长不下降子序列(LIS)

啊呜啊呜,又是动规~

最长不下降子序列是什么

要明白最长不下降子序列,啊首先得明白子序列是什么,跟子串不同,子序列可以是一段非连续的序列中的值,但必须按照顺序!例如,1、2、3中1、3是子序列,但3、1就不是子序列,那最长不下降子序列,就是在一个序列中提出一段不下降的子序列(例如5、3、2、6、7、1中5、6、7这个子序列就不下降)并使子序列最长。

最长不下降子序列怎么求

最长不下降子序列是要用到动规的,因为我也不知道为什么(水)啊不过它确实是用动规做的,不要问为什么,讲下来长篇大论的。

好好好不水字数了,切入蒸屉

那怎么求呢,对于当前位置来说,只要我们知道前面最长的子序列的长度和子序列结尾是否大于当前位置上的数,就可以求出当前位置的最长不下降子序列的长度了(不就是简单的DP么)啊别忘了哈,最前面为最大子序列长度为1(可不是么,只有一个数)

代码

最长不下降子序列可以应用到很多题目上,而且动规题不一定是模板,所以给出状态转移方程就可以了(分明就是不给你抄哈哈

for(int i=1;i<=n;i++){
	for(int j=1;j<i;j++){
		if(a[i]>=a[j]){
			dp[i]=max(dp[j]+1,dp[i]);
		}
	}
}

也就一段很简单的代码,这,就是动态转移方程,这么明了的代码不会看不懂吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值