solution.cpp 912 字节
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#include <iostream>
using namespace std;

int team[20][6];
int max_sum;
bool st[20];

int max(int a, int b) { return a > b ? a : b; }

void dfs(int u, int sum) //u当前选择团队的第几人,sum当前团队总值
{
    if (u > 5)
    {
        max_sum = max(max_sum, sum);
        return;
    } //如果选完了,更新最大值,退出

    for (int i = 0; i < 20; i++) //20人
    {
        if (!st[i]) //如果当前人没有被选择
        {
            st[i] = true;                 //被选
            dfs(u + 1, sum + team[i][u]); //选下一个人,队伍总值增加当前人的当前号位的值
            st[i] = false;                //回溯
        }
    }
}
int main()
{
    for (int i = 0; i < 20; i++)
        for (int j = 0; j < 6; j++)
            cin >> team[i][j]; //读队伍

    dfs(1, 0); //从第一个人开始选,当前总和为0

    cout << max_sum;
    return 0;
}