)某公司的野餐会上将举行一次拔河比赛。他们想把参与者们尽 可能分为实力相当的两支队伍。每个人都必须在其中一只队伍里,两队的人 数差距不能超过一人,且两队的队员总体重应该尽量接近。 输入: 以单独一个正整数开头,表示接下来的测试数据组数,然后是一个空行。每组数据的第一行为一个整数n,表示参加野餐会的人数(n<=100)。接下来的n行每行为一个人的重量,用1到450之间的整数表示。相邻两组数据间用一个空行隔开。 输出: 每组数据输出单独一行,包含两个数,即两队各自的队员体重。 样例输入 样例输出 1 190 200 3 100 90 200 c++写
时间: 2024-03-02 13:49:45 浏览: 218
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 105;
int n, a[MAXN];
int main() {
int T;
cin >> T;
while (T--) {
memset(a, 0, sizeof(a));
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n);
int sum1 = 0, sum2 = 0;
for (int i = n - 1; i >= 0; i--) {
if (sum1 < sum2) {
sum1 += a[i];
} else {
sum2 += a[i];
}
}
cout << sum1 << " " << sum2 << endl;
}
return 0;
}
```
思路解析:
首先将所有人的体重按升序排序,然后从最重的人开始依次分配到两个队伍中,每次都选择当前总体重较小的队伍加入。最后得到的两个队伍的总体重即为所求。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![pptx](https://img-home.csdnimg.cn/images/20241231044947.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![ppt](https://img-home.csdnimg.cn/images/20241231044937.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)