Files
python/TangDou/LanQiaoBei/LanQiaoBei13ShengSai_ZJ_II/MaiTangYuan_DFS.cpp

74 lines
1.3 KiB
C++
Raw Normal View History

2025-08-30 18:35:01 +08:00
#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;
}