最长不下降子序列 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,增添成功,反之 ...
随机推荐
- 零散知识记录-Jira的安装
Jira不支持openjdk,在linux下需要卸载后,装个jdk才行.
- 一起写一个Android图片加载框架
本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...
- java之运算符
package com.simope.myTest; import java.util.HashMap; import java.util.Iterator; import java.util.Map ...
- Gitlab的develop角色的人没有权限无法提交的问题解决方案
问题 事情是这样的,最近跟几位同事搞一些东西,打算在Gitlab上建一个仓库,然后协同开发. 我建好仓库,将其他几位同事添加进来,角色分配为Develop. 之后提交初始代码到master分支后,他们 ...
- [C++基础]一个比较常用的配置文件/初始化文件读取程序
在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...
- 打个酱油,欢迎指正FizzBuzzWhizz(c#)
平民的代码,列表法,凑个热闹,做了简单的测试,太晚了就不写测试用例了 using System; using System.Collections.Generic; using System.Linq ...
- [wikioi 2845]排序的代价(置换群)
有一列数,要对其进行排序(升序).排序只能通过交换来实现.每次交换,可以选择这列数中的任意二个,交换他们的位置,并且交换的代价为二个数的和.排序的总代价是排序过程中所有交换代价之和.先要求计算,对于任 ...
- C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)
前言 IEnumerable.IEnumerator到现在为止对这两个接口还是不太理解,不理解但是自己总是想着试着要搞明白,毕竟自己用的少,所以在此先记录一下.以备自己日后可以来翻查,同时也希望园子里 ...
- hdu3535 混合背包
分三种情况. 至少取一种 那可以直接取 或者从上一种情况来取.dp[i][k]=max(dp[i][k],dp[i-1][k-a[j].c]+a[j].v,dp[i][k-a[j].c]+a[j].v ...
- Spring 管理数据源
Spring 管理数据源 不管通过何种持久化技术,都必须通过数据连接访问数据库,在Spring中,数据连接是通过数据源获得的.在以往的应用中,数据源一般是Web应用服务器提供的.在Spring中,你不 ...