作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4098562.html

题目链接:poj 2533 Longest Ordered Subsequence 最长递增子序列

使用$len[i]$表示序列中所有长度为$i$的递增子序列中最小的第$i$个数的值为$len[i]$。对于序列的第j个数$arr[j]$,在$len$中二分查找,找到最后一个小于$arr[j]$的数$len[k]$,如果$len[k]$是序列$len$中最后的一个数,那么在其尾部添加一个数$arr[j]$,否则另$len[k+1]=arr[j]$,直到遍历完$arr$。时间复杂度为O(nlogn)。

代码如下:

 #include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <vector>
#define MAXN 1010
using namespace std;
int arr[MAXN];
int n;
int bs(vector<int> &arr,int num)
{
int b = , e = arr.size()-;
int mid;
while( b <= e )
{
mid = (b+e)/;
if( arr[mid] <= num )
{
b = mid+;
}
else
{
e = mid-;
}
}
return b;
}
int solve()
{
if( n == )
{
return ;
}
vector<int> len;
len.push_back(arr[]);
for( int i = ; i < n ; i++ )
{
if( len[len.size()-] < arr[i])
{
len.push_back(arr[i]);
}
else
{
len[bs(len, arr[i])] = arr[i];
}
}
return len.size();
}
int main(int argc, char *argv[])
{
while( scanf("%d", &n) != EOF )
{
for( int i = ; i < n ; i++ )
{
scanf("%d", &arr[i]);
}
printf("%d\n", solve());
}
}

同样还有一种$O(n^2)$的动态规划算法。使用$dp[i]$表示到第$i$个数最长的递增子序列的长度。每次用j从0到$i-1$遍历数组,如果发现arr[j]<arr[i],则说明其长度可以加1,最终取最大的长度作为dp[i],即:

\begin{equation}
dp[i] = min(dp[j])+1,(j<i,arr[j]<arr[i])
\end{equation}

代码如下:

 #include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#define MAXN 1010
using namespace std;
int dp[MAXN];
int arr[MAXN];
int n;
int solve()
{
if( n == )
{
return ;
}
memset(dp, , sizeof(dp));
dp[] = ;
int res = ;
for( int i = ; i < n ; i++ )
{
int tmp = ;
for( int j = ; j < i ; j++ )
{
if( arr[i] > arr[j] )
{
tmp = max(tmp, dp[j]);
}
}
dp[i] = tmp+;
res = max(res, dp[i]);
}
return res;
}
int main(int argc, char *argv[])
{
while(scanf("%d", &n) != EOF)
{
for( int i = ; i < n ; i++ )
{
scanf("%d", &arr[i]);
}
printf("%d\n",solve());
}
}

poj 2533 Longest Ordered Subsequence 最长递增子序列的更多相关文章

  1. POJ 2533 - Longest Ordered Subsequence - [最长递增子序列长度][LIS问题]

    题目链接:http://poj.org/problem?id=2533 Time Limit: 2000MS Memory Limit: 65536K Description A numeric se ...

  2. poj 2533 Longest Ordered Subsequence 最长递增子序列(LIS)

    两种算法 1.  O(n^2) #include<iostream> #include<cstdio> #include<cstring> using namesp ...

  3. POJ 2533 Longest Ordered Subsequence 最长递增序列

      Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...

  4. leetcode300. Longest Increasing Subsequence 最长递增子序列 、674. Longest Continuous Increasing Subsequence

    Longest Increasing Subsequence 最长递增子序列 子序列不是数组中连续的数. dp表达的意思是以i结尾的最长子序列,而不是前i个数字的最长子序列. 初始化是dp所有的都为1 ...

  5. POJ 2533 Longest Ordered Subsequence(裸LIS)

    传送门: http://poj.org/problem?id=2533 Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 6 ...

  6. POJ - 2533 Longest Ordered Subsequence与HDU - 1257 最少拦截系统 DP+贪心(最长上升子序列及最少序列个数)(LIS)

    Longest Ordered Subsequence A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let ...

  7. 题解报告:poj 2533 Longest Ordered Subsequence(最长上升子序列LIS)

    Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence ...

  8. POJ 2533 Longest Ordered Subsequence(最长上升子序列(NlogN)

    传送门 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subseque ...

  9. POJ 2533 Longest Ordered Subsequence(DP 最长上升子序列)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 38980   Acc ...

随机推荐

  1. PHP中各种Hash算法性能比较

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  2. 获取WMI硬件清单

    WMI服务能够报告详细的硬件信息.通常,每个硬件都来自它们自己的WMI代理类.但是要找出这些硬件类的名字是不容易. 所有硬件类都在同一个WMI根下面,你可以在根类查询所有的硬件: Get-WmiObj ...

  3. android.annotation cannot be resolved

    http://stackoverflow.com/questions/14870596/android-annotation-cannot-be-resolved As Artem suggested ...

  4. android122 zhihuibeijing 主页面搭建

    右边主页面布局设计: 文字颜色选择器和是否点击的图片选择器  路径和写法: <?xml version="1.0" encoding="utf-8"?&g ...

  5. javascript中的 "=="

    对象之间比较比较的是引用地址 对象和其他比较,转成字符串 字符串和数字比较,字符串转成数字 布尔值和任何比较,转成数字 undefined == null NaN 和谁都不相等 javascript权 ...

  6. Middleware

    Middleware The middleware gives a single shot to the views associated into Controllers, before execu ...

  7. 第二次作业第3题_JH

    3.完成小组的“四则运算”项目的需求文档(使用Markdown写文档),尝试同组成员在各自PC上修改同一文档后,如何使用Git命令完成GitHub上的文档的更新,而不产生冲突.并验证GitHub上的文 ...

  8. 报错---[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294**

    原因: 新的SDK不允许在设置rootViewController之前做过于复杂的操作,导致在didFinishLaunchingWithOptions 结束后还没有设置rootViewControl ...

  9. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

  10. mstsc 终端服务器超出了最大允许连接的解决办法

    终端服务器超出了最大允许连接的解决办法   win7系统:运行,输入mstsc /v xxx.xxx.xxx.xxx /admin win2003系统:运行,输入mstsc /v xxx.xxx.xx ...