0
点赞
收藏
分享

微信扫一扫

华为OD-D卷游戏分组

巧乐兹_d41f 2024-08-12 阅读 34

题目解析:关键在于如何找到两组实力差最小的分组,想起以前小时候玩的斗鸡游戏,一般都是由实力最强的和实力第二强的来选队友,然后哪一队实力稍弱了,我们就让这一队先选就好。

一开始感觉有点像背包问题,我们算出总的游戏水平评分,然后把背包大小设置为总评分的一半往里面放就行,后来发现还需要保证每个组都是五人,这样就不太适用了。

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        int[] nums = new int[]{5, 1, 8, 3, 4, 6, 7, 10, 9, 2};
        // 处理数据
        Scanner scanner = new Scanner(System.in);
        int[] nums = new int[10];
        for (int i = 0; i < 10; i++) {
            nums[i] = scanner.nextInt();
        }
        // 按照实力排序放到栈中,这样每次取出来的都是现有最强的
        Arrays.sort(nums);
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < nums.length; i++) {
            stack.add(nums[i]);
        }
        // 统计两个队伍的总评分
        int sum1 = 0;
        int sum2 = 0;
        while (!stack.isEmpty()) {
            // 哪个队伍弱了,就先选
            if (sum1 <= sum2) {
                sum1 += stack.pop();
                sum2 += stack.pop();
            } else {
                sum2 += stack.pop();
                sum1 += stack.pop();
            }
        }
        System.out.println(Math.abs(sum2 - sum1));
    }
}
举报

相关推荐

0 条评论