#include #include #include #include #include #include #include int main() { int N; std::cin >> N; std::vector vec(N); for (auto& v : vec) { std::cin >> v; } std::vector dp(1 << N, 100000000); dp[0] = 0; std::vector discount(1 << N); std::vector> bitflag(N + 1); for (int i = 0; i < (1 << N); ++i) { int c = 0; for (int k = 0; k < N; ++k) { if (i&(1 << k)) { discount[i] = (discount[i] + vec[k]) % 1000; ++c; } } bitflag[c].emplace_back(i); } for (int i = 0; i < N; ++i) { for (auto f : bitflag[i]) { for (int k = 0; k < N; ++k) { if (f&(1 << k)) { continue; } else { dp[f | (1 << k)] = std::min(dp[f | (1 << k)], dp[f] + std::max(0, vec[k] - discount[f])); } } } } std::cout << dp[(1 << N) - 1] << std::endl; }