

public class Main {
private static int minDifference = Integer.MAX_VALUE; // 存储最小的差值
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] scores = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int totalSum = Arrays.stream(scores).sum();
boolean[] visited = new boolean[scores.length];
dfs(scores, visited, 0, scores.length, 5, totalSum);
System.out.println(minDifference);
}
// 使用递归来枚举所有可能的5人组合
private static void dfs(int[] scores, boolean[] visited, int start, int n, int k, int totalSum) {
if (k == 0) {
// 一旦选择了5人,计算这5人的评分总和
int team1Sum = 0;
for (int i = 0; i < n; i++) {
if (visited[i]) {
team1Sum += scores[i];
}
}
int team2Sum = totalSum - team1Sum;
minDifference = Math.min(minDifference, Math.abs(team1Sum - team2Sum));
return;
}
for (int i = start; i < n; i++) {
visited[i] = true;
dfs(scores, visited, i + 1, n, k - 1, totalSum);
visited[i] = false; // 回溯
}
}
}
1077

被折叠的 条评论
为什么被折叠?



