题解:P11096 [ROI 2022 Day 1] 体育课
题目大意
对于每一对
解题思路
对于某一对
而我们可以通过贪心的思想来找到最优解。
对与
所以我们可以先预处理出对于每一个元素,它前面比它大的元素个数和后面比它小的元素个数。在求解时,我们可以比较
参考代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll p[3010], a[3010], b[3010], n, res;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) cin >> p[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j < i; j++) {
if (p[j] > p[i]) a[i]++;
if (p[j] > p[i]) b[j]++;
}
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++) {
ll tp = max(a[i], b[j]) + (j - i);
tp = max(tp, abs(p[i] - p[j]));
res += tp;
}
cout << res;
return 0;
}