【算法】【动态规划】上升下降不上升不下降子序列再理解

初步理解:最长上升子序列和最长不下降子序列(动态规划)_Elephant_King的博客-CSDN博客

本文本次探讨,最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列

与这个序列倒序后的最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列

与反向遍历的最长上升子序列,最长不下降子序列,最长下降子序列,最长不上升子序列

共12个序列之间的关系

测试数据

14
13 7 9 16 38 24 37 18 44 19 21 22 63 15

将12个dp数组列出

  13791638243718441921226315
dp1最长上升子序列11234454656783
dp2最长不下降子序列11234454656783
dp3最长下降子序列12211223133314
dp4最长不上升子序列12211223133314
dp5反向遍历的最长上升子序列21124332322221
dp6反向遍历的最长不下降子序列21124332322221
dp7反向遍历的最长下降子序列78763435243211
dp8反向遍历的最长不上升子序列78763435243211
 逆序后15632221194418372438169713
dp9最长上升子序列12222323342112
dp10最长不下降子序列12222323342112
dp11最长下降子序列11234253436787
dp12最长不上升子序列11234253436787

首先可以得到的就是,反向遍历和reverse以后的dp数组,dp数组是相互倒序的 

  13791638243718441921226315
dp1最长上升子序列11234454656783
dp2最长不下降子序列11234454656783
dp3最长下降子序列12211223133314
dp4最长不上升子序列12211223133314
dp5反向遍历的最长上升子序列21124332322221
dp6反向遍历的最长不下降子序列21124332322221
dp7反向遍历的最长下降子序列78763435243211
dp8反向遍历的最长不上升子序列78763435243211
 逆序后15632221194418372438169713
dp9最长上升子序列12222323342112
dp10最长不下降子序列12222323342112
dp11最长下降子序列11234253436787
dp12最长不上升子序列11234253436787

 注意:1.最长上升子序列和逆序的最长下降子序列(不是反向遍历,是reverse),虽然dp数组不同但是通过下面代码求结果时用的结果都是一样的

其他的也是同理

stack<int> s;
	for(int i=ans;i>=0;i--){
		if(dp[i]==mmax){
			s.push(v[i]);
			mmax--;
		}
	}
	while(!s.empty()){
		cout<<s.top()<<" ";
		s.pop();
	}

正序的最长上升子序列代表这个数前面有几个比他小的

反向遍历的最长上升子序列代表这个数后面有几个比他小的 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值