算法练习--- DP 求解最长上升子序列(LIS)

Posted yxysuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法练习--- DP 求解最长上升子序列(LIS)相关的知识,希望对你有一定的参考价值。

问题描写叙述:

对于2,5,3,1,9,4,6,8,7,找出最长上升子序列的个数

最长上升子序列定义:

对于i<j i,j∈a[0...n] 满足a[i]<a[j]



1. 找出DP公式:
dp[i] = dp[j] + 1  (j<i && a[j]<a[i] && dp[i] < dp[j]+1)


2.实现代码


void Main()
{
	DP_LIS();
	Console.WriteLine(dpArr);
}




static int[] arr = new int[9]{2,5,3,1,9,4,6,8,7};
static int n = 9;
static int[] dpArr = new int[9];


static void DP_LIS(){


for(var i= 0;i < n; i++){
dpArr[i] = 1;
for(var j = 0;j < i; j++){
if(arr[j]<arr[i] && dpArr[i] < dpArr[j] + 1){
dpArr[i]  = dpArr[j]+1;
}
}


}


}





dpArr[0...n-1]中,最大的元素即为所求。

作为联系,本例打印出了dp数组中的全部元素

以上是关于算法练习--- DP 求解最长上升子序列(LIS)的主要内容,如果未能解决你的问题,请参考以下文章

最长上升子序列(LIS)动态规划

LIS:最长上升子序列

最长上升子序列LIS(Longest Increasing Subsequence)

动态规划模板1|LIS最长上升子序列

LIS最长上升子序列O(nlogn)算法

最长上升子序列(LIS经典变型) dp学习~5