// Mochi Kasato - MKasato
// FB: facebook.com/mochikasato/
// Problem link: https://d...content-available-to-author-only...j.ca/problem/coci16c4p3
#include <bits/stdc++.h>
#define boostcode ios_base::sync_with_stdio(0); cin.tie(0);
#define openf if (fopen("test.inp", "r")) {freopen("test.inp", "r", stdin); freopen("test.out", "w", stdout);}
#define fi first
#define se second
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
int n;
int c[502];
int dp[200002]; // dp[x]: Trạng thái cho biết tồn tại cách chia i vật dụng đầu
int dp2[200002]; // Tương tự dp[x], nhưng dùng để xử lí với cách chia i+1 vật dụng đầu
int main() {
boostcode;
// openf;
cin >> n;
for (int i = 1; i <= n; i++) cin >> c[i];
// Tính S = c[1] + c[2] + ... + c[n]:
int S = 0;
for (int i = 1; i <= n; i++) S += c[i];
// Xử lí quy hoạch động:
for (int x = 1; x <= S; x++) dp[x] = -1; // Ban đầu, để dp[x] = -1, ngoại trừ dp[0] (do ban đầu không lấy vật nào hết)
for (int i = 1; i <= n; i++) {
for (int x = 0; x <= S; x++) dp2[x] = -1;
for (int x = 0; x <= S; x++) {
if (dp[x] == -1) continue;
dp2[x] = max(dp2[x], dp[x]); // Không chia cho ai hết
dp2[abs(x-c[i])] = max(dp2[abs(x-c[i])], dp[x] + c[i]); // Chia cho bạn có phần nhỏ hơn
dp2[x+c[i]] = max(dp2[x+c[i]], dp[x] + c[i]); // Chia cho bạn có phần lớn hơn
}
for (int x = 0; x <= S; x++) dp[x] = dp2[x]; // lưu giá trị dp2[] và reset lại dp2[] cho những lần xử lí dp với i kế tiếp
}
// Tính kết quả bài toán cần tìm:
int T = (dp[0])/2;
int res = S - T;
cout << res;
return 0;
}
/* TESTS:
Test 1:
5
2
3
5
8
13
-->
18
*/
Ly8gTW9jaGkgS2FzYXRvIC0gTUthc2F0bwovLyBGQjogZmFjZWJvb2suY29tL21vY2hpa2FzYXRvLwovLyBQcm9ibGVtIGxpbms6IGh0dHBzOi8vZC4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uai5jYS9wcm9ibGVtL2NvY2kxNmM0cDMKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgYm9vc3Rjb2RlIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CiNkZWZpbmUgb3BlbmYgaWYgKGZvcGVuKCJ0ZXN0LmlucCIsICJyIikpIHtmcmVvcGVuKCJ0ZXN0LmlucCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKCJ0ZXN0Lm91dCIsICJ3Iiwgc3Rkb3V0KTt9CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwYih4KSBwdXNoX2JhY2soeCkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKCmludCBuOwppbnQgY1s1MDJdOwppbnQgZHBbMjAwMDAyXTsgLy8gZHBbeF06IFRy4bqhbmcgdGjDoWkgY2hvIGJp4bq/dCB04buTbiB04bqhaSBjw6FjaCBjaGlhIGkgduG6rXQgZOG7pW5nIMSR4bqndQppbnQgZHAyWzIwMDAwMl07IC8vIFTGsMahbmcgdOG7sSBkcFt4XSwgbmjGsG5nIGTDuW5nIMSR4buDIHjhu60gbMOtIHbhu5tpIGPDoWNoIGNoaWEgaSsxIHbhuq10IGThu6VuZyDEkeG6p3UKCmludCBtYWluKCkgewogICAgYm9vc3Rjb2RlOwovLyAgICBvcGVuZjsKCiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGNbaV07CiAgICAvLyBUw61uaCBTID0gY1sxXSArIGNbMl0gKyAuLi4gKyBjW25dOgogICAgaW50IFMgPSAwOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBTICs9IGNbaV07CiAgICAvLyBY4butIGzDrSBxdXkgaG/huqFjaCDEkeG7mW5nOgogICAgZm9yIChpbnQgeCA9IDE7IHggPD0gUzsgeCsrKSBkcFt4XSA9IC0xOyAvLyBCYW4gxJHhuqd1LCDEkeG7gyBkcFt4XSA9IC0xLCBuZ2/huqFpIHRy4burIGRwWzBdIChkbyBiYW4gxJHhuqd1IGtow7RuZyBs4bqleSB24bqtdCBuw6BvIGjhur90KQogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPD0gUzsgeCsrKSBkcDJbeF0gPSAtMTsKICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8PSBTOyB4KyspIHsKICAgICAgICAgICAgaWYgKGRwW3hdID09IC0xKSBjb250aW51ZTsKICAgICAgICAgICAgZHAyW3hdID0gbWF4KGRwMlt4XSwgZHBbeF0pOyAvLyBLaMO0bmcgY2hpYSBjaG8gYWkgaOG6v3QKICAgICAgICAgICAgZHAyW2Ficyh4LWNbaV0pXSA9IG1heChkcDJbYWJzKHgtY1tpXSldLCBkcFt4XSArIGNbaV0pOyAvLyBDaGlhIGNobyBi4bqhbiBjw7MgcGjhuqduIG5o4buPIGjGoW4KICAgICAgICAgICAgZHAyW3grY1tpXV0gPSBtYXgoZHAyW3grY1tpXV0sIGRwW3hdICsgY1tpXSk7IC8vIENoaWEgY2hvIGLhuqFuIGPDsyBwaOG6p24gbOG7m24gaMahbgogICAgICAgIH0KICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8PSBTOyB4KyspIGRwW3hdID0gZHAyW3hdOyAvLyBsxrB1IGdpw6EgdHLhu4sgZHAyW10gdsOgIHJlc2V0IGzhuqFpIGRwMltdIGNobyBuaOG7r25nIGzhuqduIHjhu60gbMOtIGRwIHbhu5tpIGkga+G6vyB0aeG6v3AKICAgIH0KICAgIC8vIFTDrW5oIGvhur90IHF14bqjIGLDoGkgdG/DoW4gY+G6p24gdMOsbToKICAgIGludCBUID0gKGRwWzBdKS8yOwogICAgaW50IHJlcyA9IFMgLSBUOwogICAgY291dCA8PCByZXM7CgogICAgcmV0dXJuIDA7Cn0KLyogVEVTVFM6ClRlc3QgMToKNQoyCjMKNQo4CjEzCi0tPgoxOAoqLwo=