最长不下降子序列 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,增添成功,反之 ...
随机推荐
- 学习笔记——Ant
首先找个视频,你不可否认视频的确是入门最快的学习方式.入门学习视频(共两集)点我去观看 然后找一本入门级的资料看 ANT基础使用手册.pdf 现在你可以看看其他人写的脚本.估计简单的都能看懂. 然后找 ...
- 小白安装linux(虚拟机)red hat enterprise linux 6
额,这篇貌似是我名义上的第一篇博客,但是我好像没有第一写他,没事,都一样.(我会假装它是人生中第一篇博客的) 上大学之后,很久之后才发现自己听喜欢linux的,因为感觉很高大上,所以自己自学了很多关于 ...
- java <? super Fruit>与<? extends Fruit>
package Test2016; import java.util.ArrayList; import java.util.List; public class Test2016 { public ...
- [C/C++基础] C语言常用函数sprintf和snprintf的使用方法
Sprintf 函数声明:int sprintf(char *buffer, const char *format [, argument1, argument2, …]) 用途:将一段数据写入以地址 ...
- Jsp内置对象及EL表达式的使用
一.JSP的内置对象(9个JSP内置对象) JSP的内置对象引用名称 对应的类型 request HttpServletRequest response HttpServletResponse ses ...
- windows API 开发飞机订票系统 图形化界面 (二)
首先,用到的数据结构的定义.以及全局变量和函数的声明如下: // Flight.c : 定义应用程序的入口点. // #include "stdafx.h" //订单 typede ...
- SequoiaDB 系列之五 :源码分析之main函数
好久好久没有写博客了,因为一直要做各种事,工作上的,生活上的,这一下就是半年. 时光如梭. 这两天回头看了看写的博客,感觉都是贻笑大方. 但是还是想坚持把SequoiaDB系列写完. 初步的打算已经确 ...
- Andriod开发环境的发展演变
安卓早先只能使用JAVA开发应用程序,现在支持多种编程语言,方便了许多程序员,但主流的应该还是JAVA语言.早先安卓开发经常用到eclipse,但自从google 发布了Android studio后 ...
- struts2支持的结果类型
在struts2-core.jar/struts-default.xml中,我们可以找到关于result-type的一些配置信息,从中可以看出struts2组件默认为我们提供了这 些result-ty ...
- Dinic问题
问题:As more and more computers are equipped with dual core CPU, SetagLilb, the Chief Technology Offic ...