TYVJ P1067 合唱队形 Label:上升子序列?
背景
描述
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
输入格式
输出格式
测试样例1
输入
8
186 186 150 200 160 130 197 220
输出
4
备注
对于全部的数据,保证有n<=100。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 1<<30
using namespace std;
int N,res=INF,a[],b[],dp[],f[],l,r;
int longest(int k){
fill(dp,dp+N,INF);
for(int i=;i<=k;i++){
*lower_bound(dp,dp+N,a[i])=a[i];
if(i==k) l=lower_bound(dp,dp+N,INF)-dp;
}
// printf("k=%d l=%d ",k,l);
fill(dp,dp+N,INF);
for(int i=;i<=N-k+;i++){
*lower_bound(dp,dp+N,b[i])=b[i];
if(i==N-k+) r=lower_bound(dp,dp+N,INF)-dp;
}
// printf("r=%d\n",r);
if(r==||l==) return -;
return l+r-;
}
int main(){
// freopen("01.txt","r",stdin);
scanf("%d",&N);
for(int i=;i<=N;i++) scanf("%d",&a[i]);
for(int i=;i<=N;i++) b[i]=a[N-i+];
// for(int i=1;i<=N;i++) printf("%d ",b[i]); for(int i=;i<=N;i++){
int k=longest(i);
if(k==-) k=INF;
else k=N-k;
res=min(res,k);
} if(res==INF) res=;
printf("%d\n",res);
return ;
}直接顺序读入a数组,再逆序复制一份到b,枚举中间点,过一下最长上升子序列,
记录当中间点推入时的序列长度,得到最小值;
其实可以不用逆序复制,为了不浪费时间,采用了O(nlogn)的lower_bound;
看了下题解发现本来就是上升或下降(即没有答案时)要输出0
非二分做法如下
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define inf 0x3f3f3f3f
using namespace std;
int a[],zuo[],you[],N;
int zuo_(){
fill(zuo,zuo+,);
for(int i=;i<=N;i++){
for(int j=i+;j<=N;j++){
if(a[j]>a[i]) zuo[j]=max(zuo[j],zuo[i]+);
}
}
}
int you_(){
fill(you,you+,);
for(int i=N;i>=;i--){
for(int j=i-;j>=;j--){
if(a[j]>a[i]) you[j]=max(you[j],you[i]+);
}
}
}
int main(){
freopen("01.txt","r",stdin);
scanf("%d",&N);
for(int i=;i<=N;i++)
scanf("%d",&a[i]); zuo_();
you_();
int ans=; for(int i=;i<=N;i++)
ans=max(ans,zuo[i]+you[i]-);
if(ans==) puts("");
else printf("%d\n",N-ans);
return ;
}
TYVJ P1067 合唱队形 Label:上升子序列?的更多相关文章
- tyvj 1067 合唱队形 dp LIS
P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N ...
- NOIP200407合唱队形+最长上升子序列O(n^2)详解
合唱队形解题报告 2016-05-12 4:30——6:45 NOIP200407合唱队形 难度级别:A: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:20000 ...
- NOIP 2004 T3 合唱队形(DP、最长上升/下降子序列)
链接:https://ac.nowcoder.com/acm/contest/1082/C来源:牛客网 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队 ...
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1131 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合 ...
- 洛谷 P1091 合唱队形
\[传送门在这里呀\] 题目描述 \(N\)位同学站成一排,音乐老师要请其中的\((N-K)\)位同学出列,使得剩下的\(K\)位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次 ...
- 洛谷p1091合唱队形题解
题目 合唱队形首先要满足的是从1这个位置到中间任意的位置为单增的,从中间任意的位置到最后是单减的,且长度最长.这样才能满足出列的同学最少. 如果要满足这个条件那么我们可以先预处理出每个点的从前找的最长 ...
- (LIS) P1091 合唱队形 洛谷
题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...
- JOBDU 题目1131:合唱队形
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4546 解决:1445 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. ...
- vijos 1098 合唱队形 - 动态规划
描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…, ...
随机推荐
- 一些Linux的路径
系统引导时启动 /etc/rc.d/rc.local
- 查看Eclipse中的jar包的源代码:jd-gui.exe
前面搞了很久的使用JAD,各种下载插件,最后配置好了,还是不能用,不知道怎么回事, 想起一起用过的jd-gui.exe这个工具,是各种强大啊!!! 只需要把jar包直接扔进去就可以了,非常清晰,全部解 ...
- 1.前端笔记之html
title: 1.前端笔记之HTML date: 2016-04-04 23:21:52 tags: Python categories: Python --- 作者:刘耀 **出处:http://w ...
- sublime text3083 破解 插件汉化
sublime text 注册码 1. Sublime Text 2.x 版本 —– BEGIN LICENSE —– Andrew Weber Single User License EA7E ...
- 如何手动修改XP系统属性中的技术支持信息
\windows\system32目录下有个oeminof.ini,里面是OEM显示的文字信息,把相应项目修改即可,OEM图片使用的是本目录下的OEMlogo.bmp(图片:创建一个图形文件,像素尺寸 ...
- CSS备忘
垂直居中: 先height再ling-height,都设成一样高 span 垂直居中:vertical-align:50%设置外边距: margin-top,m ...
- HybridApp iOS ATS解决方案
苹果在最近的一次WWDC上提出将在2017年1月1日起强制我们用HTTPS,否则提交App可能会被拒绝.很多ios应用的已经放出支持HTTPS的SDK了.本文主要针对混合式IOS应用提供相关的解决方案 ...
- linux环境下配置虚拟主机域名
linux环境下面配置虚拟主机域名 第一步:在root目录下面(即根目录)ls(查看文件)cd进入etc目录find hosts文件vi hosts 打开hosts文件并进行编辑在打开的文件最下面添加 ...
- 一、HTML和CSS基础--网页布局--网页布局基础
W3C标准: 由万维网联盟制定的一系列标准,包括: 结构化标准语言(HTML和XML) 表现标准语言(CSS) 行为标准语言(DOM和ECMAScript) 倡导结构.样式.行为分离. CSS 规定的 ...
- SQL 外键
先新建2个表,写入数据 -- 创建测试主表. ID 是主键. CREATE TABLE test_main ( id INT, value ), PRIMARY KEY(id) ); -- 创建测试子 ...