zoukankan      html  css  js  c++  java
  • 算法练习--- 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数组中的全部元素

  • 相关阅读:
    GDUFE ACM-1020
    GDUFE ACM-1069(简单的巴什博弈)
    GDUFE ACM-1138
    GDUFE ACM-1009
    GDUFE ACM-1008
    GDUFE ACM-1005
    LCA 最近公共祖先
    51nod
    51nod
    51nod
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6747063.html
Copyright © 2011-2022 走看看