题目描述

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

合唱队形定义:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,

则他们的身高满足T1 < T2 < … < Ti, Ti > Ti+1 > … > TK (1 <= i <= K)。

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

输入

输入的第一行是一个整数N,表示同学的总数。

第一行有n个整数,用空格分隔,第i个整数Ti是第i位同学的身高(厘米)。

输出

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

解题思路

定义n位同学的身高数组为a[n](注意这里数组长度不允许为变量,这里只是为了理解将n写如到[]中)。

【总体思路】:假设第i(0<= i <= n – 1)个同学为最高点,分别求出此时i左边的最长递增子序列长度inc1[i],i右边的最长递减子序列长度inc2[i],由于最高点i同时包括在了inc1[i]和inc2[i]之中,因此实际的合唱队形的长度为inc1[i] + inc2[i] – 1。而我们求得的最后结果就是i从1到n – 1中,使得inc1[i] + inc2[i] – 1最大的情况。

【具体实现】:现在设i为下标,循环i从0到n-1,求得各种i值对应的inc1[i];循环i从0到n-1,求得各种i值对应的inc2[i]。最后循环i从0到n-1,求得各种i值对应的inc[i] + inc2[i] – 1最大的情况ans,然后n – ans即为出列同学的人数。

当i = 0的时候,最高点0左边只有它自己,因此inc1[0] = 1;当i = n – 1的时候,最高点n – 1右边只有它自己,因此inc2[n – 1] = 1;当i处于0到n – 1之间时的求法也很好理解,在求inc1[i]时,j = (0 ~ i – 1)的inc[j]已经得出来了,所以我们只需要比较在前面的这些序列中加上a[i]时的最长递增序列,即在a[i]大于前面这些序列值的情况下inc[j] + 1最大的情况即为inc[i]。

源代码如下:

#include

#include

using namespace std;

int inc1[200],inc2[200],a[200];

//inc1-->longest increase array from head to tail

//inc2-->longest increase array from tail to head

int main()

{

int n;

while(scanf("%d",&n)!=EOF)

{

int ans=0,i,j;

for(i = 0; i < n; i++) //输入n个人的身高

scanf("%d",&a[i]);

//inc1[i]是存储以i为最高点时左边的递增子序列长度

inc1[0]=1;

for(i = 1; i < n; i++)

{

inc1[i] = 1;

for(j = 0; j < i; j++)

if(a[i] > a[j] && inc1[j] + 1 > inc1[i])

inc1[i] = inc1[j]+1;

}

//inc2[i]是存储以i为最高点时左边的递减子序列长度

inc2[n - 1] = 1;

for(i = n - 2; i >= 0; i--)

{

inc2[i] = 1;

for(j = n - 1; j > i; j--)

if(a[j] < a[i] && inc2[j] + 1 > inc2[i])

inc2[i] = inc2[j] + 1;

}

for(i = 0; i<=n; i++)

if(inc1[i] + inc2[i]-1 > ans)

ans = inc1[i] + inc2[i] - 1;

printf("%d\n",n-ans);

}

return 0;

}

合唱队形java_动态规划之合唱队形问题(最长递增子序列变形)相关推荐

  1. Leetcode动态规划:300.longest-increasing-subsequence(最长递增子序列)

    300. 最长递增子序列 最近一直在攻克动态规划的题,Leetcode的简单题已经刷完,现在冲中等题,这道题算是一个比较经典的题吧,独立完成,虽然花了两个多小时,但收获很多: 思路:动态规划首先要找到 ...

  2. 动态规划设计方法详解最长递增子序列

    很多读者反应,就算看了前文动态规划详解,了解了动态规划的套路,也不会写状态转移方程,没有思路,怎么办?本文就借助「最长递增子序列」来讲一种设计动态规划的通用技巧:数学归纳思想. 最长递增子序列(Lon ...

  3. 【动态规划刷题笔记】线性dp:合唱队形(最长递增子序列的变体)

    [NOIP2004 提高组] 合唱队形 - 洛谷 思路:最少出列,即挑出最多,即找最长递增子序列和最长递减子序列 设dp1[i]为以h[i]结尾的最长递增子序列 dp2[i]为以h[i]开头的最长递减 ...

  4. 最长递增子序列 java_最长递增子序列问题---动态规划

    最长递增子序列问题是一个很基本.较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法.由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能 ...

  5. 动态规划(最长递增子序列)---最长递增子序列

    最长递增子序列 300. Longest Increasing Subsequence (Medium) 题目描述:   给定一个数组,找到它的最长递增子序列 思路分析:   动态规划思想,定义一个数 ...

  6. 动态规划算法分析和理解:最长公共子序列、公共子字符串

    定义啥的就不多说了,反正我有自己的理解就行.例题是,最长公共子序列和最长公共子字符串的动态规划求解过程 目录 一.递归和动态规划 二.动态规划求解步骤 三.最长公共子序列 四.最长公共子字符串 一.递 ...

  7. 动态规划算法-04最长递增子序列问题

    最长递增子序列问题 简述 经典的动态规划问题. 问题描述 给定一个序列,求解其中长度最长的递增子序列. 问题分析 这种可以向下查询答案的很容易想到动态规划的解法. 要求长度为i的序列Ai={a1,a2 ...

  8. 动态规划应用--最长递增子序列 LeetCode 300

    文章目录 1. 问题描述 2. 解题思路 2.1 动态规划 2.2 二分查找 1. 问题描述 有一个数字序列包含n个不同的数字,如何求出这个序列中的最长递增子序列长度?比如2,9,3,6,5,1,7这 ...

  9. 最长单调递增子序列_最长递增子序列(动态规划 + 二分搜索)

    题目 给定数组arr,返回arr的最长递增子序列 举例:arr = [2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9] 要求:如果arr的长度为N,请实现时间复杂度为 ...

  10. 动态规划算法 | 最长递增子序列

    通过查阅相关资料发现动态规划问题一般就是求解最值问题.这种方法在解决一些问题时应用比较多,比如求最长递增子序列等. 有部分人认为动态规划的核心就是:穷举.因为要求最值,肯定要把所有可行的答案穷举出来, ...

最新文章

  1. 上市 10 天就遭破解!AirTag 还能买吗?
  2. php获得注册信息,PHP网络编程:获取用户的注册信息[2]
  3. CATALINA_BASE和CATALINA_HOME,多实例tomcat与多版本tomcat运行
  4. [二叉树]二叉树中和为某一值的路径 (剑指offer24)
  5. java进阶之注解篇
  6. 白鹭引擎制作滚动框,类似div的oveflow
  7. 用C#製作PDF文件全攻略
  8. Android的异步多线程消息处理机制
  9. IPQ4019 QSDK 下添加RM500Q 5G 驱动 qmi拨号链接网络 配置 IPK包方法
  10. 前端性能优化 24 条建议
  11. narwal机器人_首款全自动扫拖一体机器人Narwal云鲸,彻底解放双手
  12. 服务器无线组网,物联网无线组网介绍
  13. 立创商城中的元件应用到AD中的一些经验
  14. 计算机软件由程序数据和文档组成其中主体是,chap03 计算机软件
  15. 二元逻辑回归(logistic regression)
  16. c语言scanf中 作用,c语言中scanf的用法
  17. 操作系统哲学原理(22)操作系统设计原理-操作系统设计之哲学原理
  18. 控制系统计算机仿真实验一,控制系统计算机仿真实验青岛科技大学
  19. JAVA计算机毕业设计薪酬福利管理信息系统计算机(附源码、数据库)
  20. openstack-11:安装dashiboard界面

热门文章

  1. FMI飞马网|如何尽早的接触人工智能才不会被抢饭碗,2030年会怎么样?
  2. 关于谷歌的一个简单工具以及chrome浏览器更新方法
  3. openmv实现二维码识别与串口发送
  4. Laravel - 从百草园到三味书屋 From Apprentice To Artisan目录
  5. w ndows中的文档文件是,在 Wndows 资源管理器中刻录 CD 或 DVD.doc
  6. extern C C 调用c++
  7. 将旧硬盘的内容克隆到新硬盘
  8. python 重定向 网址错_Python URL重定向问题
  9. 蛋糕甜品小程序有哪些,这3款小程序值得收藏!
  10. -O1 -O2 -O3 优化的原理是什么?