30 / 40 pts 代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e2 + 10;
const int INF = 1e9 + 10;
int n, sum = INF;
int a[N];
int check(int x) {
int ans = 0;
int val = a[1];
for (int i = 2; i <= x; i++)
if (a[i] <= val) val = min(val, a[i]), ans++;
else val = a[i];
val = a[n];
for (int i = n - 1; i >= x; i--)
if (a[i] <= val) val = max(val, a[i]), ans++;//这里改为 a[i] >= val 的话 40 pts
else val = a[i];
return ans;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
int val;
for (int i = 1; i <= n; i++)
if (check(i) < sum) sum = check(i), val = i;
cout << sum /* << " " << val*/<< endl;
return 0;
}
主要思路就是枚举每一个点作为最高点,然后在左边和右边分别扫描计算需要删除的人数,然后取最小值。