博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenJudge Bailian 2757 最长上升子序列 DP
阅读量:7063 次
发布时间:2019-06-28

本文共 1389 字,大约阅读时间需要 4 分钟。

最长上升子序列
Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
 
 

Description

一个数的序列 
bi,当 
b1 < 
b2 < ... < 
bS的时候,我们称这个序列是上升的。对于给定的一个序列( 
a1
a2, ..., 
aN),我们可以得到一些上升的子序列( 
ai1
ai2, ..., 
aiK),这里1 <= 
i1 < 
i2 < ... < 
iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8). 
你的任务,就是对于给定的序列,求出最长上升子序列的长度。

Input

输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。

Output

最长上升子序列的长度。

Sample Input

71 7 3 5 9 4 8

Sample Output

4
#include 
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define FIN freopen("input.txt","r",stdin);#define FOUT freopen("output.txt","w",stdout);#define INF 0x3f3f3f3f#define INFLL 0x3f3f3f3f3f3f3f#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1typedef long long LL;typedef pair
PII;int a[1005];int dp[1005];int main(){ //FIN int n; scanf("%d", &n); int m; dp[1] = 1; for(int i = 1; i <= n; i ++) scanf("%d", &a[i]); for(int i = 2; i <= n;i ++){ m = 0; for(int j = 1; j <= i-1; j ++){ if(a[j] < a[i] && dp[j] > m){ //在前i-1中,找出终点小于dp[i]的最长的子序列 m = dp[j]; } } dp[i] = m + 1; } sort(dp + 1, dp +1 +n); printf("%d", dp[n]);}

  

 

转载于:https://www.cnblogs.com/Hyouka/p/5778386.html

你可能感兴趣的文章
如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (一)
查看>>
sublime text3简体中文版汉化教程
查看>>
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
查看>>
字符串处理文章outline
查看>>
ubuntu12.04 QtCreator ibus 中文输入
查看>>
这次偶遇宁可不要,也要把秘诀送给你们
查看>>
Docker系列教程21-Docker Compose快速入门
查看>>
SmartDeblur-图片模糊处理器
查看>>
2018 年最常见的 Python 面试题 & 答案
查看>>
金陵怀古——游梅花山、明孝陵记
查看>>
算法与数据结构(六)并查集
查看>>
Android 开发小知识点收集(随时更新)
查看>>
如何为你的微信小程序瘦身?
查看>>
微信小程序正式发布,符合你的预期么?
查看>>
最最最常见的Java面试题总结-第一周
查看>>
是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?...
查看>>
MacOS下SVN迁移Git踩坑记
查看>>
14 -Flask构建弹幕微电影网站-后台逻辑(六)
查看>>
思考 | 云计算 + 区块链 = ?
查看>>
Java 学习(02)--数据类型/类型转换/键盘录入
查看>>