问题描述:
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,而不改变其他同学的位置,使得剩下的K位同学排成合唱队形。合唱队形要求:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<T2...<Ti>Ti+1>…>TK(1<=i<=K)。已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成最长的合唱队形。
问题分析:
假设第i位同学为个子最高的同学,我们先对其左边的同学求最大上升子序列,再对其右边的同学求最大下降子序列,然后两者相加再减1(第i位同学被重复计算了一次),便得到第i位同学为最高个时所能排成的最长合唱队形。如果我们对这N位同学都执行此操作,便可得到每位同学为最高个时所能排成的最长合唱队形,选取其中最长的合唱队形作为最终的结果。