P2392. kkksc03考前临时抱佛脚

考点

  • DFS

题解

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
#include <bits/stdc++.h>

using namespace std;

int arr[4][20], ans[4], res;

void read(int arr[], int n)
{
for (int i = 0; i < n; ++i)
cin >> arr[i];
}

void dfs(int arr[], int idx, int lbrain, int rbrain, int n)
{
if (idx == n)
{
res = min(res, max(lbrain, rbrain));
return;
}
dfs(arr, idx + 1, lbrain + arr[idx], rbrain, n);
dfs(arr, idx + 1, lbrain, rbrain + arr[idx], n);
}

int main()
{
for (int i = 0; i < 4; ++i)
cin >> ans[i];
for (int i = 0; i < 4; ++i)
read(arr[i], ans[i]);
for (int i = 0; i < 4; ++i)
res = INT_MAX, dfs(arr[i], 0, 0, 0, ans[i]), ans[i] = res;
res = 0;
for (int i = 0; i < 4; ++i)
res += ans[i];
cout << res;
return 0;
}

思路

每次都有两种情况,给左脑还是给右脑,每科最多20次,也就是410的时间复杂度,暴力DFS是可以过的