第十届蓝桥杯B组省赛第A题
作者:互联网
试题 A: 组队
【问题描述】
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员, 组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
490
#include <stdio.h>
#include<iostream>
#include<string>
#include<algorithm>//sort函数包含的头文件
using namespace std;
struct t{
int a[5];
int num;
}some[20];
int some1[20][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
}; //原始数据
int any[5][5]; //取出数据
int name[5][5]; //取出名字
int names[20]; //遍历名字
int plays[5]; //遍历
int num[5]; //职业种类啊
int i,j,k,c,amax,temp;
int name1,name2,name3,fractionfe1,fractionfe2,fractionfe3;
//int some[5][20];
bool cmp(t aa,t bb){
return aa.a[k]>bb.a[k];
}
void zzz(int bbb)
{
int i,j;
if(bbb==5){
amax=amax>temp?amax:temp;
return;
}
for(i=0;i<5;i++){
if(num[i]==0){
num[i]=1;
for(j=0;j<5;j++){
if(names[name[i][j]]==0){
break;
//剪枝
}
}
names[name[i][j]]=1;
temp+=any[i][j];
zzz(bbb+1);
temp-=any[i][j];
names[name[i][j]]=0;
num[i]=0;
}
}
}
int main(){
c=0;
for(i=0;i<20;i++){
names[i]=0;
}
for(i=0;i<5;i++){
plays[i]=0;
num[i]=0;
for(j=0;j<5;j++){
any[i][j]=0;
name[i][j]=0;
}
}
for(i=0;i<20;i++){
some[i].num=i;
for(j=0;j<5;j++){
some[i].a[j]=some1[i][j];
}
}
for(k=0;k<5;k++){
sort(some,some+20,cmp);
for(i=4;i>=0;i--){
any[k][i]=some[i].a[k];
name[k][i]=some[i].num;
}
}
for(i=0;i<20;i++){
for(j=0;j<5;j++){
printf("%d ",some[i].a[j]);
}
printf("\n");
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf(" %d %d ",name[i][j],any[i][j]);
}
printf("\n");
}
amax=0;
temp=0;
zzz(0);
printf("%d",amax);
return 0;
}
标签:name,第十届,int,号位,some,蓝桥,num,any,组省赛 来源: https://www.cnblogs.com/tlysMoodspace/p/11842214.html