问题描述:

N 位同学站成一排,音乐老师要请其中的(N-K)位同学出列,而不改变其他同学的位置,使得剩下的K位同学排成合唱队形。合唱队形要求:设K位同学从左到右 依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足 T1Ti+1>…>TK(1<=i<=K)。已知所有N位同学的身高,计算最少需要几位 同学出列,可以使得剩下的同学排成最长的合唱队形。

问题分析:

假设第i位同学为个子最高的同学,我们先对其左边的同学求最大上升子序列,再对其右边的同学求最大下降子序列,然后两者相加再减1(第i位同学被重复计算 了一次),便得到第i位同学为最高个时所能排成的最长合唱队形。如果我们对这N位同学都执行此操作,便可得到每位同学为最高个时所能排成的最长合唱队形, 选取其中最长的合唱队形作为最终的结果。

从 上述的分析可以看出,我们可以将问题分成互相不独立的子问题,只要得到子问题的最优解,便可得到整个问题的最优解。我们可以用一张表来记录所有已解决问题 的答案,从而避免了重复计算。这里的一个关键问题便是:如何得到第i位同学的最大上升子序列和最大下降子序列。假如这N位同学的身高分别 为:176,163,150,180,170,130,167,160,我们用up[i]来记录第i位同学的最大上升子序列。如果要得到180同学为最高 个时的最大上升子序列即up[4],我们只需求出前3位同学所能形成的最大上升子序列,将其加1即可;要得到前3位同学所形成的最大上升子序列,便要求得 前2位同学的最大上升子序列,再加上1即可;同样要得到前2位同学的最大上升子序列,便要求得第1位同学的最大上升子序列。因此这是一个递推关系,只要我 们将前i个同学为最高个时做形成的最大上升子序列的值记录下来,取其中最大值加1便可得到第i位同学的最大上升子序列即up[i]。同理我们用 down[i]来记录第i位同学的最大下降子序列,只要我们将后(N-i)位同学每位同学为最高个时的最大下降子序列记录下来,取其中最大者再加1便可得 到第i位同学为最高个时的最大下降子序列即down[i]。那么,第i位同学为最高个时做能形成的最长合唱队形的长度为up[i]+down[i]-1。 求得所有同学为最高个时所能形成的最长合唱队形的长度,取其中最大值为最终的结果。

public class Main {

public static void main(String[] args) {

int []high={176,163,150,180,170,130,167,160};

int []up=new int[8];   //记录每位同学的最大上升子序列

int []down=new int[8]; //记录每位同学的最大下降子序列

for(int i=0;i

up[i]=1; //每位同学的最大上升子序列初始值为1

for(int j=0;j

if((high[j]

}

}

for(int i=high.length-1;i>=0;i--){

down[i]=1;

for(int j=high.length-1;j>i;j--){

if((high[j]

}

}

int max=0; //设每位同学所形成的最长合唱队形的最大值初值为0

int index=0; //设最大值对应的索引为0

for(int i=0;i

if(up[i]+down[i]-1>max) {

max=up[i]+down[i]-1; //求得每位同学所形成的最长合唱队形的最大值

index=i;  //求得对应的索引

}

}

System.out.println("最长合唱队形的长度为:"+max);

System.out.println("对应的是第"+(index+1)+"位同学,需要"+(high.length-max)+"位同学出列");

}

}

合唱队形java_动态规划之合唱队形问题相关推荐

  1. 合唱队形(动态规划)

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

  2. P1091 [NOIP2004 提高组] 合唱队形(动态规划+LIS)

    P1091 [NOIP2004 提高组] 合唱队形 Part1:链接: 点我就送屠龙宝刀[doge] Part2:题目 Part3:思路 隔了这么久,屑人再次捡起了他的节操,洗了洗,然后开始续写他的苦 ...

  3. 最佳队形(动态规划)

    问题描述: 要参加某项比赛,参赛人员需要排成两队(分别定义为A和B,每队人数至少为1且每队人数随意).每人写一个字母代表自己,字母为a-z或A-Z.例如A对的字母为:c m c,B对字母为:s n m ...

  4. 不止代码:合唱队列(动态规划)

    文章目录 题目描述 解析 1.n^2^朴素算法 2.队列nlogn算法 代码 3.二维DP(n^2^) 代码 thanks for reading! 题目描述 五一到了,PKU-ACM队组织大家去登山 ...

  5. 动态规划备忘录方法Java_动态规划和备忘录法的区别

    动态规划算法的基本要素:1最优子结构性质当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质.2重叠子问题性质动态规划算法对每个问题只解一次,将其解保存在一个表格中,当再次需要解此问题时 ...

  6. 凑零钱动态规划java_动态规划巧解凑零钱问题 | 创作者训练营

    动态规划是运筹学中求最优解的常用手段,解决此类问题的难点在于准确归纳出状态转移方程 状态转移方程,最重要的是先找到状态,然后将「大问题」转换成「小问题」,将「全局问题」转换成「局部问题」.转换的过程用 ...

  7. 石子合并问题java_动态规划求石子合并问题

    1.问题描述 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分.试设计一个算法,计算出将n堆石子合 ...

  8. 动态规划石子排序java_动态规划之石子归并

    题目:有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量 和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输 ...

  9. 找零程序Java_动态规划——硬币找零问题(java)

    如果要求一个问题的最优解(通常是最大值或者最小值),而且该问题能够分解成若干个子问题,并且小问题之间也存在重叠的子问题,则考虑采用动态规划. 使用动态规划特征:1.求一个问题的最优解2.大问题可以分解 ...

  10. 输出最长单调递增子序列java_动态规划实现最长单调递增子序列

    1. 实验环境 操作系统:Mac 64 运行内存:16GB 编程语言:Java 编译环境:Eclipse 2. 题目要求 设计一个Ο(nlgn)时间的算法,求一个 n 个数的序列的最长单调递增子序列. ...

最新文章

  1. Linux系统下的Nginx的缓存设置、压缩配置和自动列目录配置
  2. web人力资源信息系统开发日志②
  3. BZOJ 3513: [MUTC2013]idiots [FFT]
  4. mysql报错error2002_mysql中异常错误ERROR:2002的解决方法分享
  5. [转载] Java:获取数组中的子数组的多种方法
  6. WPE(Winsock Packet Editor)
  7. 10打开没有反应_118个遇水反应化学品清单及高压反应釜操作经验
  8. catia创成式外形设计如何将两个面相合_汽车研发:车门铰链设计及布置要求解析!...
  9. VMware中网络设置之host-only
  10. 高平二中2021高考成绩查询,录取信息
  11. docsify,文档生成利器!
  12. NLP领域最优秀的8个预训练模型(附开源地址)
  13. SSD容量也不宜小,最好1T往上
  14. eclipse语言包安装太慢,或者卡住不动的解决方法
  15. Exploring Plain Vision Transformer Backbones for Object Detection 论文阅读笔记
  16. android ip v6 teredo,[转] 在家轻轻松松上IPv6站点之Teredo篇
  17. python分析红楼梦中人物形象_《红楼梦》中女性人物形象分析
  18. 详解RAI I、C++中的智能指针以及一些常见的面试题
  19. 红黑树删除操作的各种情况分析
  20. C语言计算一个整数的位数

热门文章

  1. tablayou设置固定下划线和根据文字显示长短显示下划线
  2. 一步一步分析Gin框架路由源码及radix tree基数树
  3. 企鹅吞狗,狗走狐悲,狼厂危矣
  4. 关于计算机的教学论文,关于计算机教学论文
  5. DBF文件使用JAVA读写解决方案
  6. 无人超市的核心不在于代替人,而是一款赚钱的互联网产品,是互联网伸向现实世界的
  7. python execute传参_把参数传递给命令行.execute()
  8. Google Play开发者账号注册、GoogleWallet解封及收款教程
  9. psycopg2 : cursor already closed
  10. 虎年2022头像在线生成HTML网站源码