试题 A:组队

本题总分:5 分

【问题描述】

       作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。

       每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?

第十届蓝桥杯省赛C++B组 组队_文本文件

       (如果你把以上文字复制到文本文件中,请务必检查复制的内容是否与文 档中的一致。在试题目录下有一个文件 team.txt,内容与上面表格中的相同, 请注意第一列是编号)

【答案提交】
       这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
 

答案:490

思路:第一题嘛,没什么好说的,就是暴力!(粗心的我居然选了同一个人)

参考代码:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<map>
#include<set>
using namespace std;
struct player
{
int no;
int a,b,c,d,e;
}team[20];

int main()
{
FILE *fp=fopen("team.txt","r");
for(int i=0;i<20;i++)
fscanf(fp,"%d%d%d%d%d%d",&team[i].no,&team[i].a,&team[i].b,&team[i].c,&team[i].d,&team[i].e);
int ans=0;
for(int i=0;i<20;i++)
{
if(!team[i].a)
continue;
for(int j=0;j<20;j++)
{
if(j==i||!team[j].b)
continue;
for(int k=0;k<20;k++)
{
if(k==j||k==i||!team[k].c)
continue;
for(int m=0;m<20;m++)
{
if(m==k||m==j||m==i||!team[m].d)
continue;
for(int n=0;n<20;n++)
{
if(n==m||n==k||n==j||n==i||!team[n].e)
continue;
if(team[i].a+team[j].b+team[k].c+team[m].d+team[n].e>ans)
ans=team[i].a+team[j].b+team[k].c+team[m].d+team[n].e;
}
}
}
}
}
printf("%d\n",ans);
return 0;
}