蓝桥杯:组队 暴力解法
【问题描述】
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1号位至 5 号位的评分之和最大可能是多少?
试题 A: 组队 2第十届蓝桥杯大赛软件类省赛 C/C++ 大学 B 组
编号 1 号位 2 号位 3 号位 4 号位 5 号位
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
(如果你把以上文字复制到文本文件中,请务必检查复制的内容是否与文档中的一致。在试题目录下有一个文件 team.txt,内容与上面表格中的相同,请注意第一列是编号)
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
答案
490
思路
好像数据量不大,205 也就 3200000,直接暴力解之
代码
#include <iostream>
using namespace std;
int visited[21];
int pp[21][6];
int mmax = 0;
void dfs(int p, int sum)
{
if(p > 5)
{
if(sum > mmax)
{
mmax = sum;
}
}
else
{
for(int i=1; i<=20; i++)
{
if(visited[i] == 0)
{
visited[i] = 1;
dfs(p+1, sum+pp[i][p]);
visited[i] = 0;
}
}
}
}
int main()
{
for(int i=1; i<=20; i++)
{
visited[i] = 0;
for(int j=1; j<=5; j++)
{
cin>>pp[i][j];
}
}
dfs(1, 0);
cout<<mmax<<endl;
return 0;
}