题解 | #合唱队#
合唱队
http://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
首先必须有两个序列划分,一个是最长上升序列,一个是最长下降序列,我们需要分别求出每个序列的元素。
int stu[n];//学生数组
int minNum=n;
求最长上升序列
dp_increase[0]=1;
for(int i=1; i<n;i++){
dp_increase[i]=1;
if(stu[j]<stu[i] && dp_increase[j]+1>dp_increase[i]){
dp_increase[i]=dp_increase[j]+1;
}
求最长下降序列
db_decrease[n-1]=1;
for(int i=n-2;i>=0;i--){
dp_decrease[i]=1;
if(stu[j]<stu[i] && dp_increase[j]+1>dp_increase[i]){
dp_increase[i]=dp_increase[j]+1;
}
求需要去除几个学生
if(n-(dp_increase[i]+dp_decrease[i]-1)<minNum)
minNum =n-(dp_increase[i]+dp_decrease[i]-1);