#include using namespace std; #define rep(i, n, m) for (ll i = n; i < (ll)(m); i++) #define rrep(i, n, m) for (ll i = n; i <= (ll)(m); i++) using ll = long long; int N; bool chk(ll k, vector E) { // kを3進数に変換する string base3 = ""; while (k != 0) { if (k % 3 == 0) base3 = '0' + base3; if (k % 3 == 1) base3 = '1' + base3; if (k % 3 == 2) base3 = '2' + base3; k = k / 3; } // base3にN桁まで0埋めする ll keta = N - base3.size(); string append(keta, '0'); base3 = append + base3; // cout << base3 << endl; // return true; // base3のi桁目の数値が0⇒A、1⇒B、2⇒Cとして、E[i]を足し込む ll A = 0, B = 0, C = 0; rrep(i, 0, N - 1) { if (base3.at(i) == '0') A += E.at(i); if (base3.at(i) == '1') B += E.at(i); if (base3.at(i) == '2') C += E.at(i); } // 判定 if (A == B and B == C) return true; else return false; } int main() { cin >> N; vector E(N); rrep(i, 0, N - 1) cin >> E.at(i); // sum{i∈I} (Ei) = sum{j∈J} (Ej) = sum{k∈K} (Ek) // となるようなI,J,Kが存在すればYes, else Noを出力する // I,J,Kは互いに素な集合とする // 全探索すると、N<=12なので、12を3つに分割する。ただし最低1つ含む。 // とりあえずソートしておく sort(E.begin(), E.end()); // 3進数でbit全探索ぽいことをする // 0からpow(3,N) -1 まで // k桁目が0or1or2でどのクラスに属するかを全探索 rrep(k, 0, pow(3, N) - 1) { // kとEから条件を満たすかをチェックする // ひとつでも満たせば終了 if (chk(k, E)) { cout << "Yes" << endl; return 0; } } cout << "No" << endl; return 0; }