试题 A: 组队
本题总分:5 分
【问题描述】
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,
组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1
号位至 5 号位的评分之和最大可能是多少?
答案:490
(如果你把以上文字复制到文本文件中,请务必检查复制的内容是否与文
档中的一致。在试题目录下有一个文件 team.txt,内容与上面表格中的相同,
请注意第一列是编号)
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
方法:
1、直接计算
2、代码
思路:
1、找出全部数值中的最大值a,即为我们所要的答案之一。
2、去掉数值a所在的行和列的值,重复步骤1直到找到5个数值。
(下面只是其中一个例子,还有多种情况)
2、深搜(记得把数值前的编号去掉)
97 90 0 0 0
92 85 96 0 0
0 0 0 0 93
0 0 0 80 86
89 83 97 0 0
82 86 0 0 0
0 0 0 87 90
0 97 96 0 0
0 0 89 0 0
95 99 0 0 0
0 0 96 97 0
0 0 0 93 98
94 91 0 0 0
0 83 87 0 0
0 0 98 97 98
0 0 0 93 86
98 83 99 98 81
93 87 92 96 98
0 0 0 89 92
0 99 96 95 81
#include<iostream>
using namespace std;
int team[20][5];
int vis[20];
int max_sum = 0;
int max(int x,int y){
return x>y?x:y;
}
void dfs(int index, int sum)
{ int i;
if(index == 5){
max_sum = max(max_sum, sum);
return;
}
for(i = 0; i < 20; i++){
if(!vis[i]){
vis[i] = 1;
dfs(index + 1, sum + team[i][index]);
vis[i] = 0;
}
}
}
int main()
{
for(int i = 0; i < 20; i++){
for(int j=0;j<5;j++)
cin>>team[i][j];
}
dfs(0, 0);
cout<<max_sum<<endl;
return 0;
}