74 lines
1.3 KiB
C++
74 lines
1.3 KiB
C++
|
|
#include <bits/stdc++.h>
|
|||
|
|
using namespace std;
|
|||
|
|
const int N = 30;
|
|||
|
|
int a[N];
|
|||
|
|
int n;
|
|||
|
|
//<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>
|
|||
|
|
int res;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
bool isHz(int a, int b) {
|
|||
|
|
for (int i = 2; i <= min(a, b); i++) //a,b<><62><EFBFBD>ܴ<EFBFBD><DCB4>ڵĹ<DAB5><C4B9><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (a % i == 0 && b % i == 0)
|
|||
|
|
return false;
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool found = false; //<2F><><EFBFBD><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD><EFBFBD>ܱ<EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> found=true<75>ǿ<EFBFBD><C7BF>Ա<EFBFBD><D4B1>found=false<73>Dz<EFBFBD><C7B2>ܱ<EFBFBD><DCB1><EFBFBD>
|
|||
|
|
|
|||
|
|
//<2F>ܱ<EFBFBD>ʾ
|
|||
|
|
void dfs(int sum, int u) { //<2F><>a[]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3>ܲ<EFBFBD><DCB2>ܱ<EFBFBD>ʾ<EFBFBD><CABE>x<EFBFBD><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>true,<2C><><EFBFBD><EFBFBD>false
|
|||
|
|
if (u == n + 1) {
|
|||
|
|
if (sum == 0)
|
|||
|
|
found = true;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>Ե<EFBFBD>ǰa[u]ѡ<><D1A1>i<EFBFBD><69>
|
|||
|
|
for (int i = 0; sum >= i * a[u]; i++) //i<><69>ö<EFBFBD>ٵ<EFBFBD>a[u]<5D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD>
|
|||
|
|
dfs(sum - i * a[u], u + 1);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int main() {
|
|||
|
|
|
|||
|
|
cin >> n;
|
|||
|
|
for (int i = 1; i <= n; i++)
|
|||
|
|
cin >> a[i];
|
|||
|
|
|
|||
|
|
//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
|
|||
|
|
sort(a + 1, a + 1 + n);
|
|||
|
|
|
|||
|
|
//a<><61><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>Dz<EFBFBD><C7B2>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD>
|
|||
|
|
bool flag = false;
|
|||
|
|
|
|||
|
|
|
|||
|
|
int mx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (int i = 1; i <= n; i++) {
|
|||
|
|
for (int j = i + 1; j <= n; j++)
|
|||
|
|
if (isHz(a[i], a[j])) {
|
|||
|
|
flag = true;
|
|||
|
|
mx = a[i] * a[j] - a[i] - a[j];
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if (flag)
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (flag) {
|
|||
|
|
for (int i = 1; i <= mx; i++) {
|
|||
|
|
//һ<><D2BB>Ҫ<EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
found = false;
|
|||
|
|
dfs(i, 1);
|
|||
|
|
if (!found)
|
|||
|
|
res++;
|
|||
|
|
}
|
|||
|
|
cout << res << endl;
|
|||
|
|
} else
|
|||
|
|
cout << -1 << endl;
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|