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 }

     

  • 相关阅读:
    设置开发环境
    安装开发软件
    学习路线
    预备知识
    Spring是什么
    yum安装nginx
    .net 哈希
    Excel文件处理Demo
    汉字处理组件
    Log4Net
  • 原文地址:https://www.cnblogs.com/wsdestdq/p/6772500.html
Copyright © 2011-2022 走看看