<Problem>
https://oj.vnoi.info/problem/baric
#include <iostream>
using namespace std;
#define MAX 1e9
int main() {
int n, E;
cin >> n >> E;
int* a = new int[n + 1];
for (int i = 1; i <= n; i++) cin >> a[i];
int maxVal = MAX;
int numOfChoice = 0;
int f[101][101];
int d[101][101];
for (int i = 1; i <= n; i++) {
f[1][i] = 0;
for (int j = 1; j <= n; j++) {
f[1][i] = f[1][i] + 2 * abs(a[j] - a[i]);
}
if (f[1][i] <= E) {
if (maxVal > f[1][i]) {
maxVal = f[1][i];
numOfChoice = 1;
}
}
}
if (numOfChoice == 1) {
cout << numOfChoice << " " << maxVal << endl;
return 0;
}
else {
for (int i = 1; i <= n - 1; i++) {
for (int j = i + 1; j <= n; j++) {
d[i][j] = 0;
for (int k = j; k <= n; k++) {
d[i][j] = d[i][j] + 2 * abs(a[k] - a[j]) - 2 * abs(a[k] - a[i]);
}
for (int k = i + 1; k <= j - 1; k++) {
d[i][j] = d[i][j] + abs(2 * a[k] - a[i] - a[j]) - 2 * abs(a[k] - a[i]);
}
}
}
for (int i = 2; i <= n; i++) {
int maxVal = MAX;
for (int j = 1; j <= n; j++) {
if (j < i) f[i][j] = MAX;
else {
f[i][j] = MAX;
for (int k = j - 1; k >= i - 1; k--) {
if (f[i][j] > f[i - 1][k] + d[k][j]) {
f[i][j] = f[i - 1][k] + d[k][j];
}
}
}
if (f[i][j] <= E) {
if (f[i][j] < maxVal) {
maxVal = f[i][j];
}
numOfChoice = i;
}
}
if (numOfChoice != 0) {
cout << numOfChoice << " " << maxVal << endl;
return 0;
}
}
}
return 0;
}