试题A:组队
题目略:
解题思路:详见代码段中注释。
答案:490
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>using namespace std;int Team[20][5];//20个球员,每人在1~5号位的评分
int arr[20];void Read(){for(int i=0;i<20;i++){int id;cin>>id;for(int j=0;j<5;j++)cin>>Team[i][j];}
}void printTeam(){for(int i=0;i<20;i++){cout<<"id="<<i+1<<" 评分:"<<endl;for(int j=0;j<5;j++)cout<<Team[i][j]<<" ";cout<<endl;}
}void func1(){//全排列,枚举所有情况,求最优值memset(arr,0,sizeof(arr));for(int j=1;j<=5;j++)arr[14+j]=j;int MMax=0;do{int curMax=0;for(int i=0;i<20;i++){if(arr[i]>0)curMax+=Team[i][arr[i]-1];}MMax=max(MMax,curMax);}while(next_permutation(arr,arr+20));cout<<MMax<<endl;
}int main()
{Read();func1();return 0;
}