题目描述
问题描述:

X国的重大决议都是通过议会投票通过,议会里面投票者被分成K个组,如果超过半数的组投赞成票,决议就可以通过。 每组是投赞成票还是反对票也由每组内部投票决定,若这一组有超过半数的人投赞成票,那么这一组就投赞成票。

例如有3组,分别有5,7,5人,那么,至少要有6个人赞成决议才能通过(即第一组和第三组各三人)。 注意到共有17人,只需要6人赞成就有可能通过。

编写程序,告诉你组数和每组的人数,计算通过决议至少需要多少人赞成。

输入
输入格式:

共两行。

第一行:一个整数K,(K<=15);表示组数;

第二行:共K个整数,分别表示每组的人数。K以及每组的人数都是奇数。总人数不超过1001。

输出
输出格式:

一行,决议通过至少所需的人数。

样例输入
3
5 7 5
样例输出
6

思路:感觉套路有点像贪心,先取票数最少的那组,标记上,然后再穷举法求剩下的最小的那组,标记上,直到满足组数超过半数

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] f = new int[n];
        boolean[] falgs = new boolean[n];
        int count = 0;//表示有多少个组赞成
        int min = Integer.MAX_VALUE; //最少的组
        int all = 0;//记录总票数
        int mins = 0;
        for (int i = 0; i < n; i++) {
            f[i] = sc.nextInt() / 2 + 1;//取一半,因为都是奇数,所以+1
            if (min > f[i]) {
                min = f[i];
                mins = i;
            }
        }
        falgs[mins] = true;
        all += min;
        count++;
        min = Integer.MAX_VALUE;
        while (true) {
            if (count == n / 2 + 1) {
                break;
            }
            for (int i = 0; i < f.length; i++) {
                if (!falgs[i]) {
                    if (min > f[i]) {
                        min = f[i];
                        mins = i;
                    }
                }
            }
            falgs[mins]  = true;
            all += min;
            min = Integer.MAX_VALUE;
            count++;
        }
        System.out.println(all);
    }
}