动态规划
分别求出每个位置元素的左边最长递增序列和右边最长递减序列,求和之后取最大,就是符合的合唱队形,用总人数减去合理的人数就是所求结果。
import java.util.*;
public class Main{
public static void main(String []args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int []num=new int[n];
for(int i=0;i<n;i++){
num[i]=input.nextInt();
}
int maxLen=0;
for(int i=0;i<n;i++){
int []dp=new int[i+1];
Arrays.fill(dp,1);
for(int j=1;j<=i;j++){ //找到左边最长递增
for(int k=j+1;k<=i;k++){
if(num[k]>num[j]){
dp[k]=Math.max(dp[k],dp[j]+1);
}
}
}
int left=dp[i];
dp=new int[n];
Arrays.fill(dp,1);
for(int j=i;j<n;j++){ //找到右边最长递减
for(int k=j+1;k<n;k++){
if(num[k]<num[j]){
dp[k]=Math.max(dp[k],dp[j]+1);
}
}
}
int right=dp[n-1];
maxLen=Math.max(maxLen,left+right-1);
}
System.out.println(n-maxLen);
}
}

京公网安备 11010502036488号