[第十届蓝桥杯省赛C++B组]组队 原创

题目来源:第十届蓝桥杯省赛C++B组

算法标签:dfs

题目描述:

作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。 每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
在这里插入图片描述

思路:

意思是说我们要从20人里面选出5个人的阵容使得他们总数最大。
显然看不出什么贪心莽夫技巧,那么我们使用dfs暴搜,每个组合更新最大值,最后输出最大值即可。

题目代码:

#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;
}
#include<iostream>

using namespace std;

int ans;

bool st[21];
int map[21][6]={
        0,0,0,0,0,0,
        1,97,90,0,0,0,
        2,92,85,96,0,0,
        3,0,0,0,0,93,
        4,0,0,0,80,86,
        5,89,83,97,0,0,
        6,82,86,0,0,0,
        7,0,0,0,87,90,
        8,0,97,96,0,0,
        9,0,0,89,0,0,
        10,95,99,0,0,0,
        11,0,0,96,97,0,
        12,0,0,0,93,98,
        13,94,91,0,0,0,
        14,0,83,87,0,0,
        15,0,0,98,97,98,
        16,0,0,0,93,86,
        17,98,83,99,98,81,
        18,93,87,92,96,98,
        19,0,0,0,89,92,
        20,0,99,96,95,81
};

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

void dfs(int u,int sum){
        if(u>5){
                ans=max(ans,sum);
                return ;
        }

        for(int i=0;i<20;i++){
                if(!st[i]){
                        st[i]=true;
                        dfs(u+1,sum+map[i][u]);
                        st[i]=false;
                }
        }
}

int main(){

        dfs(1,0);

        cout<<ans<<endl;

        return 0;
}

答案

490

posted @   俺叫西西弗斯  阅读(0)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示