zoukankan      html  css  js  c++  java
  • Codevs 1576 最长严格上升子序列

    1576 最长严格上升子序列

     时间限制: 1 s
     空间限制: 256000 KB
     题目等级 : 黄金 Gold
     
    题目描述 Description

    给一个数组a1, a2 ... an,找到最长的上升降子序列ab1<ab2< .. <abk,其中b1<b2<..bk。

    输出长度即可。

    输入描述 Input Description

    第一行,一个整数N。

    第二行 ,N个整数(N < = 5000)

    输出描述 Output Description

    输出K的极大值,即最长不下降子序列的长度

    样例输入 Sample Input

    5

    9 3 6 2 7

    样例输出 Sample Output

    3

    数据范围及提示 Data Size & Hint

    【样例解释】

    最长不下降子序列为3,6,7

    思路:

    动态规划,定义一个数组记录子串长度,初始都设为1,找到一个比前面所有的数都大的数,然后找前面的最长子串,两者相加,就得到全部最长子串

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 int n,dp[5001],ai[5001],Dp,maxn;
     6 
     7 int DP(){
     8     for(int i=1;i<=n;i++)
     9        for(int j=1;j<=i-1;j++){
    10            if(ai[j]<ai[i])
    11                dp[i]=max(dp[i],dp[j]+1);
    12        }
    13     for(int i=1;i<=n;i++){
    14         if(maxn<dp[i])
    15         maxn=dp[i];
    16     }
    17     cout<<maxn<<endl;
    18 }
    19 
    20 int main(){
    21     while(cin>>n){
    22         for(int i=1;i<=n;i++){
    23            cin>>ai[i];
    24            dp[i]=1;
    25         }
    26         DP();
    27     }
    28     return 0;
    29 }

     

  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/wsdestdq/p/6772500.html
Copyright © 2011-2022 走看看