作者: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. ASP.NET购物车实现方法

    1.可以参考PetShop中的购物车实现方法 2.[经典示例分享]— 商城购物车设计(VS+Access)附源码 http://www.cnblogs.com/wenyang-rio/archive/ ...

  2. cocos2d-x CCSpriteBatchNode

    转自:http://www.cnblogs.com/jiackyan/archive/2013/04/14/3019880.html 1.先说下渲染批次:这是游戏引擎中一个比较重要的优化指标,指的是一 ...

  3. SQLyog MySQL GUI 11.13 Ultimate 中文破解版【转载】

    SQLyog是一个易于使用的.快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库! SQLyog MySQL GUI是我常用的一个桌面工具,功能强大,让你有使用MSSQ ...

  4. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与g ...

  5. 转ABAP将内表行列转换实例(动态内表) .

    把内表的行列转换,网上的例子很多,但是新人想看懂,几乎很难,所以总结下我是怎么完成的. 比如:你的内表如图: 你想让内表最后展示成这样:如图: 那么完成之后会是这样: 完成这个过程,得用到动态内表.看 ...

  6. percona监控模板图形解释

    http://blog.itpub.net/28916011/viewspace-1971933/ percona监控mysql的几张图形解释     最近,我仔细研究了一下percona监控mysq ...

  7. Google, FaceBook, Amazon 加州求职记 (转)

    http://blog.csdn.net/ithomer/article/details/8774006 http://www.myvisajobs.com 一年多前,出于显而易见的原因,下定决心肉身 ...

  8. iOS 网络编程:JSON解析

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  9. PHP算法--将数字金额转换成大写金额

    最近在看一些PHP算法题,遇到一个将数字金额转换成大写金额的小算法题,这里贴出自己的一个例子. 注:这个小算法适用于10万以内的金额. <?php //$num = 12345.67; func ...

  10. epoll讲解--转自”知乎“

    http://my.oschina.net/dclink/blog/287198 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套 ...