最长不下降子序列 O(nlogn) || 记忆化搜索
#include<stdio.h>
int a[] , temp[] ;
int n , top ; int binary_search (int x) {
int fir = ;
int last = top ;
int mid ;
while (fir <= last ) {
mid = (fir + last) / ;
if ( x <= temp[mid] ) {
last = mid - ;
}
else {
if (x <= temp[mid + ] )
return mid + ;
else
fir = mid + ;
}
}
} int main () {
// freopen ("a.txt" ,"r" , stdin) ;
while ( scanf ("%d" , &n ) != EOF ) {
for (int i = ; i < n ; i++ ) {
scanf ("%d" , &a[i]) ;
} top = ;//目前最长不下降子序列的长度
temp[top] = a[] ;////temp[i]为长度为i的上升子序列末尾元素的最小值
for (int i = ; i < n ; i++ ) {
if ( a[i] >= temp[top] ) {
temp[++top] = a[i] ;
}
else {
if ( a[i] < temp[] ) {
temp[] = a[i] ;
}
else {
temp[binary_search(a[i])] = a[i] ;
}
}
}
printf ("%d\n" , top + ) ;
}
return ;
}
用二分查找法
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
const int inf = 0x3f3f3f3f ;
std::vector <int> g[ + ] ;
int a[] ;
int dp[] ;
int n ; int dfs (int id , int dep )
{
if (dp[id] != ) return dp[id] ;
if (id == n - ) return dp[id] ;
bool flag = ;
for (int i = id + ; i < n ; i ++) {
if (a[i] > a[id]) {
g[dep].push_back (dfs ( i , dep + ) ) ;
flag = ;
}
}
if (flag) {
int t = max_element (g[dep].begin () , g[dep].end () ) - g[dep].begin () ;
dp[id] += g[dep][t] ;
g[dep].clear () ;
}
return dp[id] ;
} int main ()
{
// freopen ("a.txt" , "r" , stdin ) ;
while ( ~scanf ("%d" , &n) ) {
memset (dp , , sizeof(dp)) ;
for (int i = ; i < n ; i ++) scanf ("%d" , &a[i]) ;
for (int i = ; i < n ; i ++) dp[i] = ;
for (int i = n - ; i >= ; i --) { dfs (i , ) ; }
int len = -inf ;
for (int i = ; i < n ; i ++) len = std::max (len , dp[i]) ;
printf ("%d\n" , len ) ;
}
return ;
}
记忆化搜索
最长不下降子序列 O(nlogn) || 记忆化搜索的更多相关文章
- HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意: 给你一个字符串s,你可以在s中的任意位置添加任意字符,问你将s变成一个回文串最少需要添加 ...
- 求最长不下降子序列(nlogn)
最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若i<j,必有a[i]<a[j],这样最长的子序列称为最长递增子序列. 设dp[i]表示以i为结尾的最长 ...
- [Usaco2008 Feb]Eating Together麻烦的聚餐[最长不下降子序列]
Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的 ...
- 【动态规划】【二分】【最长不下降子序列】洛谷 P1020 导弹拦截
最长不下降子序列的nlogn算法 见 http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html 这题是最长不上升子序列,倒 ...
- tyvj 1049 最长不下降子序列 n^2/nlogn
P1049 最长不下降子序列 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 求最长不下降子序列的长度 输入格式 第一行为n,表示n个数第二行n个数 输出格式 ...
- 最长不下降子序列的O(n^2)算法和O(nlogn)算法
一.简单的O(n^2)的算法 很容易想到用动态规划做.设lis[]用于保存第1~i元素元素中最长不下降序列的长度,则lis[i]=max(lis[j])+1,且num[i]>num[j],i&g ...
- 最长不下降子序列nlogn算法详解
今天花了很长时间终于弄懂了这个算法……毕竟找一个好的讲解真的太难了,所以励志我要自己写一个好的讲解QAQ 这篇文章是在懂了这个问题n^2解决方案的基础上学习. 解决的问题:给定一个序列,求最长不下降子 ...
- hdu1025 最长不下降子序列nlogn算法
C - DP Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32768KB 64bit I ...
- 最长不下降子序列 nlogn && 输出序列
最长不下降子序列实现: 利用序列的单调性. 对于任意一个单调序列,如 1 2 3 4 5(是单增的),若这时向序列尾部增添一个数 x,我们只会在意 x 和 5 的大小,若 x>5,增添成功,反之 ...
随机推荐
- valueOf和toString
有一道经典的题目: var add = function() {___}; console.log(add(3)(4)(5)); // 输出60 题目要求能无限相乘,请补充add函数. 首先很显然,a ...
- js验证身份证号
/* * 身份证检测(格式.地区.生日.年龄范围) * code:检测字符串 rangeAge:年龄范围[格式为:25-55] * 返回值 0:为空 ,不为0则验证不通过 */ : : : : : : ...
- ios上uiwebview的一些实用技巧
前几个星期接到公司一个项目,要用webview在客户端上播视频,作为一个前端实习生,这种需求真是蛋疼……一不知webview是何方神圣,二不知咋调试…… 下面就是蛋疼的开始: 寻找调试工具:好,非w ...
- jQuery UI dialog
初始化参数 对于 dialog 来说,首先需要进行初始化,在调用 dialog 函数的时候,如果没有传递参数,或者传递了一个对象,那么就表示在初始化一个对话框. 没有参数,表示按照默认的设置初始化对话 ...
- [USACO 3.1.4]rect1(漂浮法/矩形切割)
描述 N个不同的颜色的不透明的长方形(1 <= N <= 1000)被放置在一张横宽为A竖长为B的白纸上. 这些长方形被放置时,保证了它们的边与白纸的边缘平行. 所有的长方形都放置在白纸内 ...
- 【codevs 1296】营业额统计 水~~
今天下午先写一个Splay水题来复习一下Splay模板.是不是有点太水了做这种水题我有点良心不安. 可笑的是一开始我竟然WA了一组,看来是我低估水题的数据范围了,我是空节点直接返回inf或-inf,明 ...
- Java基础-jdk动态代理与cglib动态代理区别
JDK动态代理 此时代理对象和目标对象实现了相同的接口,目标对象作为代理对象的一个属性,具体接口实现中,可以在调用目标对象相应方法前后加上其他业务处理逻辑. 代理模式在实际使用时需要指定具体的目标对象 ...
- 金融自助设备WOSA/XFS规范介绍
wosa(全称是windows开放式系统体系结构 windows open system architecture),是微软公司提出的一种在windows操作系统下的软件架构. wosa/xfs是基于 ...
- 【ZOJ 1221】Risk
题 题意 给你20个城市的相邻关系,求给定任意两个城市的最短距离 分析 求任意两个城市最短距离,就是用floyd算法,我脑残忘记了k是写在最外层的. 代码 #include<stdio.h> ...
- 33.Android之Fragment学习
Fragment Android是在Android 3.0 (API level 11)开始引入Fragment的. 可以把Fragment想成Activity中的模块,这个模块有自己的布局,有自己的 ...