第十届蓝桥杯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;

}

猜你喜欢

转载自www.cnblogs.com/tlysMoodspace/p/11842214.html