原题链接:https://www.luogu.com.cn/problem/P1091

合唱队形

题目描述

NNN位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K1,2,…,K他们的身高分别为T1,T2,…,TKT_1,T_2,…,T_KT1​,T2​,…,TK​ , 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1≤i≤K)T_1<...<T_i>T_{i+1}>…>T_K(1 \le i \le K)T1​<...<Ti​>Ti+1​>…>TK​(1≤i≤K)。

你的任务是,已知所有NNN位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入格式

共二行。

第一行是一个整数N(2≤N≤100)N(2 \le N \le 100)N(2≤N≤100),表示同学的总数。

第二行有nnn个整数,用空格分隔,第iii个整数Ti(130≤Ti≤230)T_i(130 \le T_i \le 230)Ti​(130≤Ti​≤230)是第ii位同学的身高(厘米)。

输出格式

一个整数,最少需要几位同学出列。

输入输出样例
输入 #1

8
186 186 150 200 160 130 197 220

输出 #1

4

说明/提示

对于50%的数据,保证有n≤20n \le 20n≤20;

对于全部的数据,保证有n≤100n \le 100n≤100。

题解

两个朴素的LIS\mathcal{LIS}LIS,我竟然还记得LIS\mathcal{LIS}LIS,泪目。

用dp[i]dp[i]dp[i]表示以第iii个同学结尾的最长上升身高序列的长度,那么对于第iii个同学,我们只需要向前面遍历每个同学,找到身高比自己矮的就尝试把自己接上去,取这些新序列中最长的作为自己的dpdpdp值。故转移方程如下:

for(int i=1;i<=n;++i)for(int j=i-1;j>=0;--j)
if(hei[i]>hei[j])dp1[i]=max(dp1[i],dp1[j]+1);

要站成合唱队形,我们只需要反向再做一个LIS\mathcal{LIS}LIS或者做一个正向LDS\mathcal{LDS}LDS,将两次结果合在一起即可。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=105;
int n,ans;
int hei[M],dp1[M],dp2[M];
void in()
{scanf("%d",&n);for(int i=1;i<=n;++i)scanf("%d",&hei[i]);
}
void ac()
{for(int i=1;i<=n;++i)for(int j=i-1;j>=0;--j)if(hei[i]>hei[j])dp1[i]=max(dp1[i],dp1[j]+1);for(int i=n;i>=1;--i)for(int j=i+1;j<=n+1;++j)if(hei[i]>hei[j])dp2[i]=max(dp2[i],dp2[j]+1);for(int i=1;i<=n;++i)ans=max(ans,dp1[i]+dp2[i]-1);printf("%d",n-ans);
}
int main(){in(),ac();}

Luogu1091 合唱队形相关推荐

  1. luogu1091合唱队形

    http://www.elijahqi.win/archives/446 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...

  2. 合唱队形(递增再递减的最长子序列)

    题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的 ...

  3. P1091 合唱队形[单调性+DP]

    题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高 ...

  4. P1091 合唱队形(LIS)

    题目描述 NNN位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K1,2, ...

  5. 洛谷P1091 合唱队形

    洛谷P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K他 ...

  6. UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)

    UOJ #214 合唱队形 (概率期望计数.DP.Min-Max容斥) 9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/ ...

  7. tyvj 1067 合唱队形 dp LIS

    P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位 ...

  8. 洛谷1091合唱队形

    题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高分别为T1​,T ...

  9. 【DP】合唱队形(jzoj 1122)

    合唱队形 jzoj 1122 题目大意: 有n个人,按一定的顺序站成一排,最少减去多少个人可以使队列以一个人为中心,两边分别递减 输入样例 8 186 186 150 200 160 130 197 ...

  10. 动态规划练习2 [合唱队形]

    N 位同学站成一排,音乐老师要请其中的 (N-K) 位同学出列,使得剩下的 K 位同学排成合唱队形. 合唱队形是指这样的一种队形:设 K 位同学从左到右依次编号为 1 , 2 -, K ,他们的身高分 ...

最新文章

  1. 实施项目--为什么开发人员一直在抱怨需求变动
  2. windows Server 2003   IIS启用父路径
  3. SQL-sp_executesql
  4. sql server 批量删除临时表
  5. Storm入门之第一章
  6. VMware虚拟机网络模式详解 NAT模式
  7. bzoj 4016: [FJOI2014]最短路径树问题
  8. 国防科大JAVA工程师笔试题_国防科大人工智能考博题答案
  9. 安徽医科大学计算机考研,这所985院校将现场面试!安徽医科大学缺额超800人!调剂信息更新...
  10. opencv qt5安装linux,Ubuntu OpenCV安装和设置(Qt5吗?)
  11. 服装企业的信息管理及主要对象(转)
  12. 用Sql Server 2000的数据库备份来还原Sql Server 2005中的数据库
  13. 一个人磊个小山包,与大家磊同一个小山包
  14. windows win32 API大全
  15. DM7 达梦数据库 物理备份 相关概念说明
  16. SpringBoot项目整合JasperReport报表生成PDF并下载
  17. 分享爬取链家地图找房房价数据的小爬虫
  18. 门外汉掌握数据分析处理技术的路线图
  19. html5理财计算,理财收益怎么算(一般理财产品的收益计算方法)
  20. 小白学习java第11天多态抽象类接口

热门文章

  1. POJ - 3233 —— 矩阵快速幂(分块矩阵与递归)
  2. 饥荒中皮弗娄牛神龛献祭什么拿什么供奉
  3. PoisonApple:针对macOS的持久化工具
  4. java实现mysql if函数,mysql中if函数的正确使用姿势,mysql的if函数
  5. php 前后端 不对称加密,AES前后端对称加密
  6. java自动扫描不好使_Spring 自动扫描 不支持jar包 component-scan
  7. mysql根据不同的值查询不同的字段_sql根据一个字段不同值查询不同表中的一个字段...
  8. sql依据单个字段去重_Java面试之常用SQL
  9. SpringBoot+Quartz实现动态可配定时任务(动态定时任务)
  10. linux网卡配置规范