1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <bits/stdc++.h>
using namespace std;

bitset < 99 > Bicik;
const int mod = 1e9 + 7;
int wynik,n;
int t[5005];
int jd[100004];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n;

    for(int i = 0; i < n; i++)
        cin >> t[i];

    for(int i = 1; i < (1<<n); i++)
    {
        vector <int> V;
        Bicik = i;
        ///cout << Bicik << endl;

        for(int j = 0; j < n; j++)
            if( Bicik[j] )
                V.push_back( t[j] );
/**
        for(int j = 0; j < V.size(); j++)
            cout << V[j] << " ";
        cout << endl;
**/
        set < int > secik;

        sort(V.begin(),V.end());


        int suma = 0;

        for(int j = 1; j < (1<<V.size()); j++)
        {
            bitset < 99 > Bicik2 = j;

            suma = 0;

            for(int k = 0; k < V.size(); k++)
            {
                if(Bicik2[k])
                    suma += V[k];

            }

            secik.insert(suma);
        }

        ///cout << suma << endl;

        if(secik.size() == suma)
            wynik = (wynik + 1) % mod;

    }

    cout << wynik % mod << endl;

}