solution.md 1.7 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 分配口罩
F
fix bug  
feilong 已提交
2

每日一练社区's avatar
每日一练社区 已提交
3 4 5 6 7 8 9 10 11 12 13 14 15
某市市长获得了若干批口罩,给定每批口罩的数量,市长要把口罩分配给市内的2所医院。

```
masks = [9090400, 8499400, 5926800, 8547000, 4958200, 4422600, 5751200, 4175600, 6309600, 5865200, 6604400, 4635000, 10663400, 8087200, 4554000]
```
由于物流限制,每一批口罩只能全部分配给其中一家医院。

市长希望2所医院获得的口罩总数之差越小越好。

请你计算这个差最小是多少?


## aop
F
fix bug  
feilong 已提交
16

每日一练社区's avatar
每日一练社区 已提交
17
### before
F
fix bug  
feilong 已提交
18

每日一练社区's avatar
每日一练社区 已提交
19 20 21 22 23 24 25 26 27 28 29 30
```cpp
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
long int masks[15] = {9090400, 8499400, 5926800, 8547000, 4958200,
                      4422600, 5751200, 4175600, 6309600,
                      5865200, 6604400, 4635000, 10663400, 8087200, 4554000};

long ans = 1000000000;
```
### after
F
fix bug  
feilong 已提交
31

每日一练社区's avatar
每日一练社区 已提交
32 33 34 35 36 37 38 39 40 41
```cpp
int main()
{
    dfs(0, 0, 0);
    cout << ans;
}

```

## 答案
F
fix bug  
feilong 已提交
42

每日一练社区's avatar
每日一练社区 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
```cpp
void dfs(int n, long h1, long h2)
{
    if (n == 15)
    {
        ans = min(ans, abs(h1 - h2));
        return;
    }
    dfs(n + 1, h1 + masks[n], h2);
    dfs(n + 1, h1, h2 + masks[n]);
}

```
## 选项

F
fix bug  
feilong 已提交
58

每日一练社区's avatar
每日一练社区 已提交
59
### A
F
fix bug  
feilong 已提交
60

每日一练社区's avatar
每日一练社区 已提交
61 62 63 64 65 66 67 68 69 70 71 72 73 74
```cpp
void dfs(int n, long h1, long h2)
{
    if (n == 15)
    {
        ans = min(ans, abs(h1 - h2));
        return;
    }
    dfs(n + 1, h1 + masks[n + 1], h2);
    dfs(n + 1, h1, h2 + masks[n + 1]);
}
```

### B
F
fix bug  
feilong 已提交
75

每日一练社区's avatar
每日一练社区 已提交
76 77 78 79 80 81 82 83 84 85 86 87 88 89
```cpp
void dfs(int n, long h1, long h2)
{
    if (n == 15)
    {
        ans = min(ans, abs(h1 - h2));
        return;
    }
    dfs(n + 1, h1 + masks[n + 1], h2);
    dfs(n + 1, h1, h2 + masks[n]);
}
```

### C
F
fix bug  
feilong 已提交
90

每日一练社区's avatar
每日一练社区 已提交
91 92 93 94 95 96 97 98 99 100 101 102
```cpp
void dfs(int n, long h1, long h2)
{
    if (n == 15)
    {
        ans = min(ans, abs(h1 - h2));
        return;
    }
    dfs(n, h1 + masks[n], h2);
    dfs(n, h1, h2 + masks[n]);
}
```