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 }
时间: 2024-12-16 12:54:23

Codevs 1576 最长严格上升子序列的相关文章

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的极大值,即最长

codevs——T1576 最长严格上升子序列

http://codevs.cn/problem/1576/  时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 给一个数组a1, a2 ... an,找到最长的上升降子序列ab1<ab2< .. <abk,其中b1<b2<..bk. 输出长度即可. 输入描述 Input Description 第一行,一个整数N. 第二行 ,N个整数(N < = 5000) 输出描述 Output

1576 最长严格上升子序列

题目描述 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

DP经典 之 CODE[VS] 1576 最长严格上升子序列 (O(n^2) 和 O(nlogn))

O(n^2): 1 /* 2 3 最长严格上升子序列 4 dp[i] : 以第i个整数结尾的最长严格上升子序列长度 5 dp[i] = max(dp[x]) + 1 6 注: x < i && arr[x] < arr[i] 7 8 */ 9 10 #define _CRT_SECURE_NO_WARNINGS 11 #include <iostream> 12 #include <cstdio> 13 #include <cstdlib>

wikioi 1576 最长严格上升子序列

简单的最长严格上升子序列的题 dp[i]表示到a[i]这个数为最后的时候最大的长度是多少 然后就差不多了吧~ #include <cstdio> #include <cmath> #include <cstring> #include <ctime> #include <iostream> #include <algorithm> #include <set> #include <vector> #includ

最长公共上升子序列(codevs 2185)

题目描述 Description 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了. 小沐沐说,对于两个串A,B,如果它们都包含一段位置不一定连续的数字,且数字是严格递增的,那么称这一段数字是两个串的公共上升子串,而所有的公共上升子串中最长的就是最长公共上升子串了. 奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子串.不过,只要告诉奶牛它的长度就可以了. 输入描述 Input Descri

codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)

题目描述 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y="y0,y1,-,yk-1"是X的子序列,存在X的一个严格递增下标序列<i0,i1,-,ik-1>,使得对所有的j=0,1,-,k-1,有xij = yj.例如,X="ABCBDAB",Y="BCDB"是X的一个子序

最长严格上子序列(二分优化)

http://codevs.cn/problem/3955/  原题网站 题目描述 Description 给一个数组a1, a2 ... an,找到最长的上升降子序列ab1<ab2< .. <abk,其中b1<b2<..bk. 输出长度即可. 输入描述 Input Description 第一行,一个整数N. 第二行 ,N个整数(N < = 1000000) 输出描述 Output Description 输出K的极大值,即最长不下降子序列的长度 样例输入 Sampl

[codevs2185]最长公共上升子序列

试题描述 熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目.小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们要研究最长公共上升子序列了.小沐沐说,对于两个串A,B,如果它们都包含一段位置不一定连续的数字,且数字是严格递增的,那么称这一段数字是两个串的公共上升子串,而所有的公共上升子串中最长的就是最长公共上升子串了.奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子串.不过,只要告诉奶牛它的长度就可以了. 输入 第一行N,表示A,B的长度.第二行,串A.第三行,串B.