题目描述
输入描述:
输出描述:
For each test, output one line which contains only one integer representing the answer of this test.
示例1
说明
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int mod = 1e9+7;
const double eps = 1e-5;
const int N = 2e5 + 10;
int T;
int n;
ll a[N], dp[N];
ll ans = 0;
int main() {
cin >> T;
while (T--) {
scanf("%d", &n);
ll mx = 0, mi = 1e9 + 10;
for (int i=1; i<=n; i++) {
scanf("%lld", &a[i]);
mx = max (mx, a[i]);
mi = min (mi, a[i]);
}
sort(a+1, a+n+1);
ans = (mx-mi) * 2;
dp[0] = 0;
for (int i=1; i<=n; i++) dp[i] = dp[i-1];
ll cmp = 0;
for (int i=1; i<=n; i++) {
dp[i] = max(dp[i-1], dp[i]);
if ((i-1)%2 == 0) {
if (i>=4 && (n-i+1)>=4) {
dp[i] = max (dp[i], dp[i-4] + a[i] - a[i-1]);
}
if (i>=6 && (n-i+1)>=4) {
dp[i] = max (dp[i], dp[i-6] + a[i] - a[i-1]);
}
}
}
printf("%lld\n", ans-dp[n]*2);
}
return 0;
}