合唱队问题(动态规划+分治法详解)

博客围绕计算最少出列同学使剩下同学排成合唱队形的问题展开。介绍了以每位同学为最高点,分别从左右找递增和递减序列的方法,得到左右人数表,进而算出每一位同学为最高时的人数及减少人数。还提及用动态规划和分治法解决该问题,分治法将左右问题独立处理。

计算最少出列多少位同学,使得剩下的同学排成合唱队形

说明:

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,   则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。

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

注意不允许改变队列元素的先后顺序

请注意处理多组输入输出!

实际就是,从队伍里直接下来人,让剩下的人刚好满足条件的情况。

8个人,[186,186,150,200,160,130,197,200]

当以每位同学为最高点时,进行判断,从他左边找比他矮的同学(可以多个,且要为递增序列)。再从右边来找比他高的同学。

例如:

先找左边的

我们假设第一位身高为 186 的同学,为最高点(Ti),他左边没有其他人,所以我们设定左边人数为0

第二位身高为 186 的同学,左边只有一个186,和他一样,所以他左边也为0

第三个150,左边也为0

第四个200,左边有186和150的同学,都比他矮,但是这两者不成递增顺序,所以只能留一个,即左边为1

第五个160,左边有150的同学,所以为1

第六个130.左边没有比他矮的了,所以为0

第七个197.左边比他矮的有186,150,160,130,而成递增顺序的为[150,160]

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值