http://poj.org/problem?id=2533

该题是最裸的LIS题,这里有两种方法。

代码如下:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;

int a[10000], dp[10004];

int main(){int N;while (scanf("%d", &N) == 1)    {int ans = 1, m;for (int i = 0; i < N; ++i)        {            scanf("%d", a+i);         }        dp[0] = 1;for (int i = 1; i < N; ++i)        {            m = 0;for (int j = 0; j < i; ++j)            {if (a[i] > a[j] && dp[j] > m)                {                    m = dp[j];                }            }            dp[i] = m+1;            ans = max(ans, dp[i]);        }         printf("%d\n", ans);    } 

}

二分优化后的写法,数组c[i]保留长度为i的上升串的末尾最小元素。

代码如下:

#include <cstdlib>#include <cstring>#include <cstdio>#define MAXN 10000using namespace std;

int a[MAXN+5];

int bsearch(int *c, int l, int r, int val){int mid;while (l <= r)    {        mid = (l+r)>>1;if (val > c[mid])            l = mid + 1;else if (val < c[mid])            r = mid - 1;else  // 如果不是严格的递增序列的话,二分查找时,相等视为后者比其大            return mid;    }return l;}

int LIS(int *a, int N){int c[MAXN], size = 1, pos;    c[1] = a[0];for (int i = 1; i < N; ++i)    {if (a[i]>c[size])            pos = ++size;else            pos = bsearch(c, 1, size, a[i]);// 返回比该值稍微大的点        c[pos] = a[i];    }return size;}

int main(){int N;while (scanf("%d", &N) == 1)    {for (int i = 0; i < N; ++i)        {            scanf("%d", &a[i]);        }        printf("%d\n", LIS(a, N));    }}

POJ-2533 Longest Ordered Subsequence相关推荐

  1. OpenJudge 2757 最长上升子序列 / Poj 2533 Longest Ordered Subsequence

    1.链接地址: http://poj.org/problem?id=2533 http://bailian.openjudge.cn/practice/2757 2.题目: 总Time Limit: ...

  2. POJ 2533 Longest Ordered Subsequence

    大致题意:求最长升子序列. f[i]:前i+1个元素中包括第i+1个的最长升子序列. // Time 32ms; Memory 224K #include<iostream> using ...

  3. POJ 2533 Longest Ordered Subsequence 动态规划

    题意 本题求从1 到 n的最长上升子序列的长度 分析 最优化问题 考虑dp 我们求1-n最长上升子序列长度 假设记录在dp[n]中 假设我们已经知道了1-n-1的以第n-1为最后一个元素的最长上升序列 ...

  4. 【POJ - 2533】Longest Ordered Subsequence(四种方法解决最长上升子序列 含二分优化版本)

    题干: Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41944   Accepted: 18453 Description ...

  5. Longest Ordered Subsequence 最长上升子序列+DP

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

  6. scau实验题 8596 Longest Ordered Subsequence

    其实解释POJ 2533 原题 最长上升子序列,用O(N*N)算法和o(n*logn)算法分别实现,学校OJ的数据比较弱,就算写成最长不下降子序列也可以通过,但是在POJ上是WA的 而题意本身应该是严 ...

  7. HOJ 10027 Longest Ordered Subsequence Extention

    初做此题时,的确注意到了数据范围,如果用动态规划做的话,两层搜索,时间复杂度为o(n^2),n达50000,铁定超时.但是我还是用dp交了一次,果然tle了.想在10001的基础上优化一下,但是苦于没 ...

  8. Longest Increasing Subsequence(LIS入门dp)

    http://poj.org/problem?id=2533 Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K D ...

  9. 10027Longest Ordered Subsequence Extention

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

最新文章

  1. 【全文搜索引擎】Elasticsearch之模糊查询
  2. linux 命令终端显示-bash-4.2#解决方法
  3. 前后端交互json字符串
  4. json爬虫获取列表数据不全,已解决
  5. 去重 属性_Javascript算法 — 数组去重
  6. NYOJ116----线段树树状数组
  7. JS数值类型与字符串类型的内置方法
  8. 无法访问。您可能没有权限使用网络资源。请与这台服务器的管理员联系查明你是否有访问权限。
  9. 密码爆破 hashcat+rar2john破解rar5压缩包密码
  10. python 三维曲线拟合_python实现三维拟合的方法
  11. 『一起学AI』生成对抗网络(GAN)原理学习及实战开发
  12. supervisorctl error (no such process)
  13. 处理.Dwg文件用哪种技术方案?ObjectARX,RealDWG还是Teigha(ODA)?
  14. 图的一些基本知识:图,邻居,度矩阵,邻接矩阵
  15. 怎么把文字转换成语音,这里有简单的方法
  16. 如何把Java代码写的简洁
  17. 用js处理打卡记录excel表
  18. oracle权限培训,【必看】Oracle用户、权限、角色管理
  19. 计算机配件及其对应作用,电脑配件与每个配件作用详细完整的解释
  20. abb工业机器人指令lf怎么用_史上最全的ABB工业机器人的指令介绍

热门文章

  1. CMSimple内容管理系统
  2. 微信壹佰超级名片小程序源码v1.1.16
  3. 2021某宝上的千月五级分润源码影视小说源码
  4. 从企业发展的角度来分析做网站的重要性
  5. 使用js实现思维导图
  6. 传参方法:sharedApplication, NSUserDefaults, protocol 和 delegate(实例)
  7. JAVA类定义,成员类,抽象类及接口类
  8. 特殊符号的写法 (HTML 4.01 符号实体)
  9. Flex组件的行为和动画效果(实例)
  10. C++ win32控制台显示月历