BZOJ 1109 (LIS)
题面
分析
设dp[i]是第i个积木在自己的位置上时,前i个积木中最多能回到自己位置的数目。
\(dp[i]=max(dp[j])+1 (i>j,a[i]>a[j],a[i]-a[j]<=i-j)\)
其中\(a[i]>a[j]\)是保证i,j都在自己的位置上,\(a[i]-a[j]<=i-j\)是为了保证中间有足够的积木让i能在a[i]这个位置上。
转换一下发现有三个条件:
$(1)  i>j   \(
\) (2) i-a[i]>=j-a[j]\(
\)(3) a[i]>a[j]$
发现 (2)+(3)就可以得到(1)
所以只剩两个条件
那么就只要按照i-a[i]排序求LIS即可。
由于i-a[i]相等时,a[i]升序就可以使答案最大,所以排序的时候第二关键字要弄成a[i]。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 100005
using namespace std;
int n;
int a[maxn];
struct node{
	int key;
	int val;
	friend bool operator < (node p,node q){
		if(p.key==q.key) return p.val<q.val;
		else return p.key<q.key;
	}
}b[maxn];
int s[maxn];
int top=0;
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i].key=i-a[i];
		b[i].val=a[i];
	}
	sort(b+1,b+1+n);
	for(int i=1;i<=n;i++){
		if(b[i].key<0) continue;//如果i-a[i]<0,即a[i]>i,则i肯定不能在合适的位置上,直接跳过
		if(b[i].val>s[top]){
			s[++top]=b[i].val;
		}else{
			int pos=lower_bound(s+1,s+1+top,b[i].val)-s;
			s[pos]=b[i].val;
		}
	}
	printf("%d\n",top);
}
												
											BZOJ 1109 (LIS)的更多相关文章
- ZOJ  1093   Monkey and Banana  (LIS)解题报告
		
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
 - 浅谈最长上升子序列(LIS)
		
一.瞎扯的内容 给一个长度为n的序列,求它的最长上升子序列(LIS) 简单的dp n=read(); ;i<=n;i++) a[i]=read(); ;i<=n;i++) ;j<i; ...
 - 最长递增子序列(LIS)(转)
		
最长递增子序列(LIS) 本博文转自作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) --- 最长递增子序列又叫做最长上升子序列 ...
 - Poj 2533 Longest Ordered Subsequence(LIS)
		
一.Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...
 - Poj 3903 Stock Exchange(LIS)
		
一.Description The world financial crisis is quite a subject. Some people are more relaxed while othe ...
 - DP——最长上升子序列(LIS)
		
DP——最长上升子序列(LIS) 基本定义: 一个序列中最长的单调递增的子序列,字符子序列指的是字符串中不一定连续但先后顺序一致的n个字符,即可以去掉字符串中的部分字符,但不可改变其前后顺序. LIS ...
 - 最长上升子序列(LIS)nlogn模板
		
参考https://www.cnblogs.com/yuelian/p/8745807.html 注意最长上升子序列用lower_bound,最长不下降子序列用upper_bound 比如123458 ...
 - 低价购买 (动态规划,变种最长下降子序列(LIS))
		
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
 - 最长上升子序列(LIS)问题
		
最长上升子序列(LIS)问题 此处我们只讨论严格单调递增的子序列求法. 前面O(n2)的算法我们省略掉,直接进入O(nlgn)算法. 方法一:dp + 树状数组 定义dp[i]:末尾数字是i时最长上升 ...
 
随机推荐
- C# 实现实体类和Xml转换
			
一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...
 - weblogic+idea
			
1.首先是weblogic的安装,去官网下载,下载完成后,安装,然后还需要创建域,参考链接: https://www.cnblogs.com/xdp-gacl/p/4140683.html,创建域的h ...
 - 2018-11-01-weekly
			
Algorithm 107. 二叉树的层次遍历 II What 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历).例如:给定二叉树 [3,9 ...
 - Linux安装mysql5.6.33
			
1.下载mysql安装包: 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads 下载版本:我这里选择的5.6.33,通用版,lin ...
 - 玩转MaxCompute studio SQL编辑器
			
SQL因其简单易学的特点,是用户与MaxCompute服务交互的主要手段.如何帮助用户高效愉快的编写SQL是MaxCompute studio的核心使命,下面就让我们来一探究竟: 忘记语法 相信大家都 ...
 - android 6.0适配(总结)
			
6.0的适配主要是权限: 权限的分组: 普通权限:也就是正常权限,是对手机的一些正常操作,对用户的隐私没有太大影响的权限,比如手机的震动,网络访问,蓝牙等权限,这些权限会在应用被安装的时候默认授予,用 ...
 - jstl学习资料
			
jstl印象中叫标准标签库,是apache的一个项目,网址为: Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Librar ...
 - 42 Bing Search Engine Hacks
			
42 Bing Search Engine Hacks November 13, 2010 By Ivan Remember Bing, the search engine Microsoft lau ...
 - web复制到剪切板js
			
web复制到剪切板 clipboard.js 好使!开源项目,下载地址: https://github.com/zenorocha/clipboard.js 使用方法: 引入 clipboard.mi ...
 - jmeter(二十):Logic Controller:逻辑控制器(上)
			
逻辑控制器用来控制采样器(samplers)的执行顺序,根据实际需要定制执行规则.在控制器层级下面的所有的采样器都会当做一个整体,执行时也会一起被执行. Logic Controller种类: 以上L ...