-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path473.cpp
40 lines (39 loc) · 886 Bytes
/
473.cpp
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
// dfs.cpp
class Solution {
bool can = 0;
int average;
int a = 0, b = 0, c = 0, d = 0;
public:
bool makesquare(vector<int> &nums) {
int sum = accumulate(nums.begin(), nums.end(), 0);
if (sum % 4 || nums.size() == 0)
return 0;
sort(nums.begin(), nums.end(), greater<int>());
average = sum / 4;
if (nums[0] > average)
return 0;
dfs(nums, 0);
return can;
}
void dfs(vector<int> &nums, int i) {
if (d == average & a == b && b == c && c == d) {
can = 1;
return;
}
if (i == nums.size() || a > average || b > average || c > average ||
d > average || can)
return;
a += nums[i];
dfs(nums, i + 1);
a -= nums[i];
b += nums[i];
dfs(nums, i + 1);
b -= nums[i];
c += nums[i];
dfs(nums, i + 1);
c -= nums[i];
d += nums[i];
dfs(nums, i + 1);
d -= nums[i];
}
};