package com.patience.interview.huawei;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
/**
* 字符序列 动态规划
* @author Green.Gee
* @date 2022/8/23 11:08
* @email green.gee.lu@gmail.com
*/
public class DancerTeam {
// 字符串序列 满足左侧升序和右侧降序规则的长度
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String N = br.readLine();
Integer n = Integer.valueOf(N);
String line = br.readLine();
String [] lines = line.split("\\s");
Integer [] original = new Integer[n];
for(int i = 0; i < n; i++){
int temp = Integer.valueOf(lines[i]);
original[i] = temp;
}
int [] left = new int[n];
Arrays.fill(left,1);
for(int i = 0; i < n; i++){
for (int j = 0; j < i; j++){
if(original[i] > original[j]){
left[i] = Math.max(left[i],left[j] + 1);
}
}
}
System.err.println(Arrays.toString(left));
int [] right = new int[n];
Arrays.fill(right,1);
for(int i = n - 1; i >= 0; i--){
for (int j = n - 1; j > i; j--){
if(original[i] > original[j]){
right[i] = Math.max(right[i],right[j] + 1);
}
}
}
System.err.println(Arrays.toString(right));
int [] result = new int[n];
int max = 1;
for(int i = 0;i < n; i++){
result[i] = left[i] + right[i] - 1;
max = Math.max(max,result[i]);
}
System.err.println(Arrays.toString(result));
System.out.println(n - max);
}
}
字符最长升降序列 Java 动态规划
最新推荐文章于 2024-07-29 18:00:00 发布