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)
还没有任何评论哟~
