1 /*
2 Prog: nuggets
3 ID: jiafeim1
4 Lang: C ++
5 */
6
7 # Include < Stdio. h >
8 # Include < String . H >
9 # Include < Math. h >
10 # Include < Algorithm >
11
12 Long Gcd ( Long A, Long B ){
13 Return B ? Gcd (B, % B):;
14 }
15
16 Int N;
17
18 Long Count [ 12 ];
19 Bool Can [ 65600 ] = { False };
20 Int Main ()
21 {
22 File * Fin = Fopen ( " Nuggets. In " , " R " );
23 File * Fout = Fopen ( " Nuggets. Out " , " W " );
24
25 Fscanf (FIN, " % D " , & N );
26 If (N = 1 )
27 {
28 Fprintf (fout, " 0 \ n " );
29 Return 0 ;
30 }
31 For ( Int I = 0 ; I < N; ++ I)
32 {
33 Fscanf (FIN, " % D " , Count + I );
34 }
35 STD: Sort (count, count + N );
36
37 Long Gcdx = Count [ 0 ];
38 For ( Int I = 1 ; I < N; ++ I)
39 {
40 Gcdx = Gcd (gcdx, Count [I]);
41 }
42
43 If (Gcdx ! = 1 | Count [ 0 ] = 1 )
44 {
45 Fprintf (fout, " 0 \ n " );
46 Return 0 ;
47 }
48
49 Long Max = Count [n - 1 ] * Count [n - 2 ];
50
51 Can [ 0 ] = True ;
52 For ( Int I = 0 ; I < N; ++ I)
53 {
54 For ( Int J = Count [I]; j <= Max; ++ J)
55 {
56 If (Can [J - Count [I])
57 Can [J] = True ;
58 }
59 For ( Int J = Max; j > = 1 ; -- J)
60 {
61 If ( ! Can [J])
62 {
63 Max = J;
64 Break ;
65 }
66 }
67 If (Max = 0 )
68 {
69 Fprintf (fout, " 0 \ n " );
70 Return 0 ;
71 }
72 }
73 Fprintf (fout, " % D \ n " , Max );
74 Fclose (FIN );
75 Fclose (fout );
76 Return 0 ;
77 }