九度oj-1533 最长上升子序列 (LIS)
http://ac.jobdu.com/problem.php?pid=1533
- 题目描述:
-
给定一个整型数组, 求这个数组的最长严格递增子序列的长度。 譬如序列1 2 2 4 3 的最长严格递增子序列为1,2,4或1,2,3.他们的长度为3。
- 输入:
-
输入可能包含多个测试案例。
对于每个测试案例,输入的第一行为一个整数n(1<=n<=100000):代表将要输入的序列长度
输入的第二行包括n个整数,代表这个数组中的数字。整数均在int范围内。
- 输出:
-
对于每个测试案例,输出其最长严格递增子序列长度。
- 样例输入:
-
4
4 2 1 3
5
1 1 1 1 1
- 样例输出:
-
2
1
dp经典题目。
解题思路1:O(n*n):dp[i]表示前i个元素中以元素i结尾的最长上升序列之长。
代码:tle
#include <fstream>
#include <iostream>
#include <cstdio> using namespace std; const int N=;
int a[N],dp[N]; int main()
{
//freopen("D:\\input.in","r",stdin);
//freopen("D:\\output.out","w",stdout);
int n,ans;
while(~scanf("%d",&n)){
ans=;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++){
dp[i]=;
for(int j=;j<i;j++){
if(a[j]<a[i]&&dp[j]+>dp[i]) dp[i]=dp[j]+;
}
ans=max(ans,dp[i]);
}
printf("%d\n",ans);
}
return ;
}
解题思路2:O(nlgn):dp[i]表示所有长度为i的最长递增序列中最小结尾元素值
代码:ac
#include <fstream>
#include <iostream>
#include <cstdio> using namespace std; const int INF=0x7fffffff;
const int N=;
int a[N],dp[N]; int main()
{
//freopen("D:\\input.in","r",stdin);
//freopen("D:\\output.out","w",stdout);
int n,ans;
while(~scanf("%d",&n)){
ans=;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
dp[]=-INF;
dp[]=a[];
for(int i=;i<=n;i++){
int l=,r=ans,mid;
while(l<=r){
mid=(l+r)>>;
if(dp[mid]<a[i]) l=mid+;
else r=mid-;
}
if(l>ans){//由这里可以看到,dp会形成一个递增序列,从而有了上面的二分查找
ans++;
dp[ans]=a[i];
}else if(dp[l-]<a[i]&&a[i]<dp[l])
dp[l]=a[i];
}
printf("%d\n",ans);
}
return ;
}
九度oj-1533 最长上升子序列 (LIS)的更多相关文章
- 九度OJ 1533 最长上升子序列 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1533 题目描述: 给定一个整型数组, 求这个数组的最长严格递增子序列的长度. 譬如序列1 2 2 4 3 的最长严 ...
- 九度oj 1530 最长不重复子串
原题链接:http://ac.jobdu.com/problem.php?pid=1530 字符串简单题,看似O(n^2)的复杂度10000的数据量会tle,其实最长不重复子串不超过26个嘛... 如 ...
- 九度OJ 1528 最长回文子串 -- Manacher算法
题目地址:http://ac.jobdu.com/problem.php?pid=1528 题目描述: 回文串就是一个正读和反读都一样的字符串,比如"level"或者"n ...
- 九度OJ 1011:最大连续子序列 (DP)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5615 解决:2668 题目描述: 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, N ...
- 九度OJ 1011 最长子串
#include <iostream> #include <string> #include <sstream> #include <math.h> u ...
- 九度oj 1528 最长回文子串
原题链接:http://ac.jobdu.com/problem.php?pid=1528 小白书上的做法,不过这个还要简单些... #include<algorithm> #includ ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 【九度OJ】题目1195:最长&最短文本 解题报告
[九度OJ]题目1195:最长&最短文本 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串, ...
- 【九度OJ】题目1069:查找学生信息 解题报告
[九度OJ]题目1069:查找学生信息 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1069 题目描述: 输入 ...
- 【九度OJ】题目1177:查找 解题报告
[九度OJ]题目1177:查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1177 题目描述: 读入一组字符串(待操作的),再读入 ...
随机推荐
- 简单使用dom4j
package com.dom4j; import java.io.FileWriter; import java.io.IOException; import java.io.Unsupported ...
- java基础第8天
继承extends(也叫扩展) 多个类中存在相同的属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可. 通过extends关键字可以实现类的继承 继承的 ...
- centos7上systemd详解
centos7上systemd详解 发表于 2016-06-07 | 分类于 linux CentOS 7继承了RHEL 7的新的特性,例如强大的systemd, 而systemd的使用也使得以往 ...
- Log4j(一):Log4j将日志信息写入数据库
前言 为了监听一些数据的采集等功能,需要随时监听设备的状态,所以需要运行的时候将日志打入到数据库中. 正文 第一步: 首先是jar包,由于我使用的是springboot,所以,在springboot- ...
- LG4777 【模板】扩展中国剩余定理(EXCRT)
题意 题目描述 给定\(n\)组非负整数\(a_i, b_i\),求解关于\(x\)的方程组 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\e ...
- 设计模式(Python)-策略模式
本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...
- java中读取配置文件
若是Javaweb项目,项目运行于tomcat或其他容器时,可以使用下面方式来获取文件的输入流 1.当属性文件放在src下面时 InputStream is = Thread.currentThrea ...
- yum安装apache及问题解决
一.检查服务器上是否已经安装了apache apache在linux系统里的名字是httpd,执行以下命令,如果有返回的信息,则会显示已经安装的软件.如果没有则不会显示其它的信息. rpm -qa h ...
- 【转】让开发变得简单一点- Visual Studio 2010几个让人印象深刻的新功能
原文网址:http://xhinker.blog.51cto.com/640011/313055/ 引言 "我们的目标,不仅仅是做出几个新功能,而是要回答一个问题:'如何让现在的开发人员生活 ...
- 一步搞定私有Git服务器部署(Gogs)
http://www.jianshu.com/p/424627516ef6 零.安装 Docker 和 Compsoe 首先安装 Docker: $ curl -sSL https://get.doc ...