1264:【例9.8】合唱队形

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 10735     通过数: 5283

【题目描述】

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

合唱队形是指这样的一种队形:设KK位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<T2<…<Ti,Ti>Ti+1>…>TK(1≤i≤K)。

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

【输入】

输入的第一行是一个整数N(2≤N≤100),表示同学的总数。第二行有n个整数,用空格分隔,第ii个整数Ti(130≤Ti≤230)是第ii位同学的身高(厘米)。

【输出】

输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。

【输入样例】

8
186 186 150 200 160 130 197 220

【输出样例】

4

【提示】

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

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

【分析】

出列人数最少,也就是留的人数最多,也就是序列最长,我们按照由左而右和由右而左的顺序,将n个同学的身高排成数列。如何分别在这两个数列中寻求递增的、未必连续的最长上升子序列和递减的、未必连续的最长下降子序列就成为问题的关键。设
        a为身高序列,其中 a[i]为同学 i 的身高。
        b为由左而右身高递增的人数序列,其中 b[i]为同学 1…同学 i 间(包括同学 i)身高满足递增顺序的最多人数。显然b[i] = max { b[j] | 同学 j 的身高 < 同学 i 的身高 +1,1<=j<=i-1 }。
        c为由右而左身高递增的人数序列,其中 c[i]为同学 n…同学 i 间(包括同学 i)身高满足递增顺序的最多人数。显然 c[i] = max { c[j] | 同学 j 的身高 < 同学 i 的身高 +1,i+1<=j<=n }。
        显然,合唱队的人数为max { b[i]+c[i] } -1(公式中的同学 i 被重复计算,因此减1)。数据存储和求解过程如下:

前面采用顺推实现,后面采用逆推实现。样例数据需要186、186、197和220这四个同学出列。

【参考代码】

#include <stdio.h>
#define N 110
int a[N];
int b[N];  // 以第i位同学为终点的最长上升序列的长度
int c[N];  // 以第i位同学为起点的最长下降序列的长度
int ans;
int main()
{int i,j,n;int maxn;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&a[i]);// 以第i位同学为终点的最长上升序列b[1]=1;for(i=2;i<=n;i++){maxn=0;for(j=1;j<i;j++){if(a[i]>a[j]){if(b[j]>maxn)maxn=b[j];}}b[i]=maxn+1;}// 以第i位同学为起点的最长下降序列c[n]=1;for(i=n-1;i>=1;i--){maxn=0;for(j=i+1;j<=n;j++){if(a[i]>a[j]){if(c[j]>maxn)maxn=c[j];}}c[i]=maxn+1;}for(i=1;i<=n;i++)if(b[i]+c[i]>ans)ans=b[i]+c[i];printf("%d\n",n-(ans-1));return 0;
}

http://ybt.ssoier.cn:8088/problem_show.php?pid=1264

信息学奥赛一本通(1264:【例9.8】合唱队形)相关推荐

  1. 【例8】合唱队形(《信息学奥赛一本通第五版》)

    /* [例8]合唱队形(<信息学奥赛一本通第五版>) http://ybt.ssoier.cn:8088/problem_show.php?pid=1264 [问题描述] N位同学站成一排 ...

  2. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02

    /* [例1] 0/1背包<信息学奥赛一本通>[解法一] 02 http://ybt.ssoier.cn:8088/problem_show.php?pid=1267 */ #includ ...

  3. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  4. 信息学奥赛一本通(2032:【例4.18】分解质因数)

    2032:[例4.18]分解质因数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 582     通过数: 376 [题目描述] 把一个合数分解成若干个质因数乘积 ...

  5. 信息学奥赛一本通——2062:【例1.3】电影票

    2062:[例1.3]电影票 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 57341     通过数: 34230 [题目描述] 已知一位小朋友的电影票价是10 ...

  6. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  7. 信息学奥赛一本通1267:【例9.11】01背包问题(二维dp与滚动数组优化)

    [题目描述] 一个旅行者有一个最多能装 MM 公斤的背包,现在有 nn 件物品,它们的重量分别是W1,W2,...,WnW1,W2,...,Wn,它们的价值分别为C1,C2,...,CnC1,C2,. ...

  8. 信息学奥赛一本通C++语言-----2036:【例5.3】开关门

    [题目描述] 宾馆里有n(2≤n≤1000)n(2≤n≤1000) 个房间,从1∼n1∼n 编了号.第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是22 的倍数的房间"相反处理& ...

  9. 信息学奥赛一本通——2068:【例2.6】鸡兔同笼

    大家好(๑╹◡╹)ノ" 这里是小蒟蒻 一天没更新了呢! 今天给大家带来<信息学奥赛一本通--2068:[例2.6]鸡兔同笼> 题目: 2068:[例2.6]鸡兔同笼 时间限制: ...

  10. 信息学奥赛一本通C++语言-----2048:【例5.18】串排序

    [题目描述] 对给定的n(1≤n≤20)n(1≤n≤20)个国家名(国家名字长度不超过2020),按其字母的顺序输出. [输入] 第一行为国家的个数nn: 以下nn行为国家的名字. [输出] nn行, ...

最新文章

  1. python字符编码讲解_python 字符编码讲解
  2. python检测英文拼写错误
  3. python发明者叫什么-近 50 年来最具影响力的 10 种编程语言,都是谁发明的?
  4. 车用TVS管 SM8S系列 国产替代
  5. 借力阿里云数据中台,日播集团“数”识消费者
  6. instance of 泛型
  7. goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...
  8. kafka streams_Kafka REST Proxy for MapR Streams入门
  9. 51nod1363 最小公倍数之和
  10. PyQt5和Python的多线程
  11. [JavaEE] Hibernate连接池配置测试
  12. java点名代码滚动_经典案例实现-点名器
  13. MyBatis学习——第五篇(手动分页和pagehelper分页实现)
  14. php中的字典数据类型,python中字典数据类型常用操作
  15. Soui Button学习一
  16. 企业抖音号怎么运营矩阵?运营有何技巧?
  17. 玉米社:竞价推广的常见误区有哪些?
  18. 自动生成PDF文件(Java通过PDF模板自动生成PDF)
  19. 高德地图、百度地图、腾讯地图坐标相互转换
  20. C++如何表示次方(尖号^不是次方的意思,e也不是次方的意思)

热门文章

  1. 查看.Net Framework版本的方法
  2. Blum Integer的定义及举例
  3. Java(六)字符串,StringBuilder,String操作,格式化输出
  4. 马斯克嘲讽元宇宙:谁会整天戴个头盔?
  5. S5PV210的内存映射
  6. 一个秒杀系统,居然比八股文还好使!
  7. 为什么阿里巴巴要求 POJO 中不能使用基本数据类型?
  8. 我苦心搭建的技术架构,终于把公司干没了……
  9. 阿里云MVP乔帮主:五大类型负载均衡的原理场景详解(文末赠书)
  10. P3-weixin 微信插件式开发规范