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
#include <iostream>
using namespace std;
struct wezel
{
	int wartosc;
	int wartosc_przeciwna;        
   
};
struct wezel *root=NULL;
int ilosc_banknotow;
    int i;
    int wczytana;
    int tablica_banknotow[1000000];
    int suma_banknotow;
    int global_max;

int create (int liczba, int suma, int suma_przeciwna, wezel *start){
	wezel *lewy = new wezel();
	wezel *prawy = new wezel();
	lewy -> wartosc = suma + tablica_banknotow[liczba];
	prawy -> wartosc = suma;
	lewy -> wartosc_przeciwna = suma_przeciwna;
	prawy -> wartosc_przeciwna = suma_przeciwna + tablica_banknotow[liczba];
	liczba++;
	if (lewy->wartosc <= suma_banknotow/2){

		if (lewy->wartosc==lewy->wartosc_przeciwna && lewy->wartosc > global_max)
		{
			global_max=lewy->wartosc;
		}
		if (liczba<ilosc_banknotow)
			create (liczba, lewy->wartosc, lewy->wartosc_przeciwna, lewy);
	}
	if (prawy->wartosc <= suma_banknotow/2){

		if (prawy->wartosc==prawy->wartosc_przeciwna && prawy->wartosc > global_max)
		{
			global_max=prawy->wartosc;
		}

		if (liczba<ilosc_banknotow)
			create (liczba, prawy->wartosc, prawy->wartosc_przeciwna, prawy);
	}
}
int main(){
    
    cin >> ilosc_banknotow;
	for (i=0; i<ilosc_banknotow; i++)
	{
		cin >> tablica_banknotow[i];
		suma_banknotow=suma_banknotow+tablica_banknotow[i];
	}
	create (0, 0, 0, root);
	if (global_max>0)
	cout << global_max*2;
	else
	cout << "NIESTETY";
	cin.ignore ();
	return 0;
}