<Problem>
https://www.spoj.com/PTIT/problems/PTIT125E/
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int arr[22];
int sum = 0;
for (int i = 1; i <= n; i++) {
cin >> arr[i];
sum += arr[i];
}
//cout << "=";
int f[22][2001][2001];
for (int i = 0; i <= n; i++)
for (int j = 0; j <= sum; j++)
for (int k = 0; k <= sum; k++)
f[i][j][k] = 0;
for (int i = 1; i <= n; i++) {
f[i][0][0] = 1;
f[i][arr[i]][0] = 1;
f[i][0][arr[i]] = 1;
for (int j = 0; j <= sum; j++)
for (int k = 0; k <= sum; k++) {
if (f[i - 1][j][k]) f[i][j][k] = 1;
else if (j - arr[i] >= 0 && f[i - 1][j - arr[i]][k]) f[i][j][k] = 1;
else if (k - arr[i] >= 0 && f[i - 1][j][k - arr[i]]) f[i][j][k] = 1;
}
}
int res = sum;
for (int j = 0; j <= sum; j++)
for (int k = 0; k <= sum; k++) {
if (f[n][j][k]) {
int d = max(j, max(k, sum - j - k));
res = min(d, res);
}
}
cout << res << endl;
return 0;
}