Advertisement

2019年第十届蓝桥杯省赛C++B组【第一题:组队】

阅读量:

第一题

问题描述

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

C++代码

复制代码
    ```#include<bits/stdc++.h>
    using namespace std;
    int team[20][6];
    int vis[20];
    int max_sum = 0;
    void dfs(int index, int sum){
    	if(index == 6){
    		max_sum = max(max_sum, sum);
    		return;
    	}
    	for(int i = 0; i < 20; i++){
    		if(!vis[i]){
    			vis[i] = 1;
    			dfs(index + 1, sum + team[i][index]);
    			vis[i] = 0;
    		}
    	}
    }
    int main(){
    	freopen("team.txt", "r", stdin); //读team.txt文件 ,输入重定向 
        //注意把team.txt放到同一级目录下,或者把这行注释掉,手动输入 
    	for(int i = 0; i < 20; i++)
    		for(int j = 0; j < 6; j++)
    			cin>>team[i][j];
    	dfs(1, 0);
    	cout<<max_sum<<endl;
    	return 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

也可以不用代码写
解析
话说这道题目别看简单,其实还真有点坑点,不细心一点,必然会WA,我比赛的时候,可能脑子抽了算的一行的最大值,其实这一道题目是要你选出1 - 20个编号的球员中选出五个位置的人,使得1号位到5号位的最大值尽可能大。就相当于求1号位到5号位每一列都最大的值。
在这里插入图片描述
492填上?那就WA了
可以看到我们圈出的每一个位置的最大值1号位和3号位还有4号位都是同一个人,这显然是错的。
所以有一个限制条件就是每个人只能去一个位置而不是多个位置。
在这里插入图片描述
这道题目编程实现的话还不如直接算来的直接。

答案:490

全部评论 (0)

还没有任何评论哟~