百木园-与人分享,
就是让自己快乐。

java题目 HJ24 合唱队

描述

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

说明:

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

你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
 
注意:不允许改变队列元素的先后顺序 且 不要求最高同学左右人数必须相等
 
数据范围: 1 \\le n \\le 3000 \\1≤n≤3000 
 

输入描述:

用例两行数据,第一行是同学的总数 N ,第二行是 N 位同学的身高,以空格隔开

输出描述:

最少需要几位同学出列

示例1

输入:

8
186 186 150 200 160 130 197 200


输出:

4


说明:

由于不允许改变队列元素的先后顺序,所以最终剩下的队列应该为186 200 160 130或150 200 160 130  

 

 1 import java.io.*;
 2 import java.util.*;
 3 
 4 public class Main {
 5     public static void main(String[] args) throws IOException {
 6         Scanner sc = new Scanner(System.in);
 7         while(sc.hasNext()) {
 8             int ren = sc.nextInt();
 9             int[] shengao = new int[ren];
10             for(int i =0; i<ren; i++) {
11                 shengao[i] = sc.nextInt();
12             }
13             
14             int[] left = new int[ren];
15             int[] righ = new int[ren];
16             int[] result = new int[ren];
17             
18             //左侧递增
19             for(int i=0; i<ren; i++) {
20                 left[i] =1;
21                 for(int j =0; j<ren; j++) {
22                     if(shengao[i] > shengao[j]) {
23                         left[i] = Math.max(left[i], left[j] + 1);
24                     }
25                 }
26             }
27             
28             //右侧递减
29             for(int i = ren -1; i>=0; i--) {
30                 righ[i] =1;
31                 for(int j =ren-1; j>=0; j--) {
32                     if(shengao[i] > shengao[j]) {
33                         righ[i] = Math.max(righ[i], righ[j] +1);
34                     }
35                 }
36             }
37             
38             for(int i =0; i<ren; i++) {
39                 result[i] = left[i] + righ[i] -1;
40             }
41             
42             int max =1;
43             for(int i=0; i< ren; i++) {
44                 max = Math.max(result[i], max);
45             }
46             
47             System.out.println(ren - max);
48         }
49     }
50 }

 


来源:https://www.cnblogs.com/m6233/p/15978630.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » java题目 HJ24 合唱队

相关推荐

  • 暂无文章