#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
#include <cmath>
#include <numeric>
using namespace std;
vector<int> power;
vector<bool> visited;
int min_diff = INT_MAX;
void dfs(int index, int level, int _sum) {
if (level == 5) {
int diff = abs(_sum - (accumulate(power.begin(), power.end(), 0) - _sum));
min_diff = min(min_diff, diff);
return;
}
for (int i = index; i < 10; i++) {
if (i > index && power[i] == power[i - 1] && !visited[i - 1]) {
continue;
}
visited[i] = true;
dfs(i + 1, level + 1, _sum + power[i]);
visited[i] = false;
}
}
int main() {
power.resize(10);
visited.resize(10, false);
for (int i = 0; i < 10; i++) {
cin >> power[i];
}
sort(power.begin(), power.end());
dfs(0, 0, 0);
cout << min_diff << endl;
return 0;
}
华为OD机试 -篮球比赛(C++ Java JavaScript Python)_od 篮球比赛-CSDN博客
#include<iostream>
#include<sstream>
#include<vector>
#include<algorithm>
#include<limits.h>
#include<random>
using namespace std;
void solveMethod(vector<int>& ints)
{
int min_diff = INT_MAX;
for(int i = 0; i < 10000; i++)
{
vector<int> tmp(ints);
random_device rd;
mt19937 g(rd());
shuffle(tmp.begin(), tmp.end(), g);
int x = 0;
int y = 0;
for(int j = 0; j < 5; j++)
{
x += tmp.back();
tmp.pop_back();
y += tmp.back();
tmp.pop_back();
}
int diff = abs(x - y);
if(diff < min_diff)
{
min_diff = diff;
}
}
cout << min_diff << endl;
}
int main()
{
string line;
getline(cin, line);
istringstream iss(line);
vector<int> ints;
int num;
while(iss >> num)
{
ints.push_back(num);
}
solveMethod(ints);
return 0;
}