题解 | #合唱队#
合唱队
https://www.nowcoder.com/practice/6d9d69e3898f45169a441632b325c7b4
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N;
while (cin >> N) { // 注意 while 处理多个 case
vector<int> array(N);
for (int i = 0; i < N; i++) {
cin >> array[i];
}
vector<int> left(N, 0);
for (int i = 0; i < N; i++) {
for (int j = 0; j < i; j++) {
if (array[j] < array[i]) {
left[i] = max(left[i], left[j] + 1);
}
}
}
vector<int> right(N, 0);
for (int i = N-1; i >=0; i--) {
for (int j = N-1; j > i; j--) {
if (array[i] > array[j]) {
right[i] = max(right[i], right[j] + 1);
}
}
}
int max_stay = 0;
for (int i = 1; i <= N - 2; ++i) {
max_stay = max(max_stay, left[i] + right[i] + 1);
}
cout << N - max_stay << endl;
}
}
// 64 位输出请用 printf("%lld")
查看15道真题和解析