zoukankan      html  css  js  c++  java
  • c++最长上升子序列

    最长上升子序列

    Description

    Input

    第一行一个整数N(N<=1000) 表示长度,第二行 N个数 A[i]表示序列里面的数,每个数不超过int范围。

    Output

    一行 表示最长递增子序列的长度

    Sample Input

    6
    1 6 2 5 4 7
    

    Sample Output

    4
    

    Source

    #include<iostream>
    using namespace std;
    #define max(a,b) a>b?a:b
    int main()
    {
    	int n, i, j, dp[101], x[101], max_len;
        for (i = 0; i < n; i++)
            cin >> x[i];
        dp[0] = 1;//表示以x[0]为子序列最右边的长度位1
        for (i = 1; i < n; i++)
        {
            dp[i] = 1;//初始化每种情况最小值为1
            for (j = 0; j < i; j++)
            {
                if (x[i]>x[j] && dp[j] + 1>dp[i])//从0-i进行扫描,查找边界小于当前最优解长度相等的解优化最优解
                    dp[i] = dp[j] + 1;//如果允许子序列相邻元素相同  x[i]>=x[j]&&dp[j]+1>dp[i];
            }
        }
        for (i = max_len = 0; i < n; i++)
            max_len = max(max_len, dp[i]);//等到最大子序列长度
        cout << max_len << endl;
        return 0;
    }
    
  • 相关阅读:
    thinkphp笔记:错误页面定制
    HDU 1263
    HDU 1106
    HDU 1209
    HDU 5479
    HDU 2094
    git clone from Gighub Fail
    Github*
    Debian ABC --- 1st time ---5
    Debian ABC --- 1st time ---4
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11483235.html
Copyright © 2011-2022 走看看