1. 程式人生 > >運動員最佳配對問題

運動員最佳配對問題

eve trac else include bits ace update code namespace

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 int p[100][100];
 5 int q[100][100];
 6 int x[100];
 7 int best[100];
 8 int answer=0;
 9 void swap(int &a,int &b){
10  int temp;
11  temp=a;
12  a=b;
13  b=temp;
14 }
15 void update(){
16 int sum=0;
17 for(int i=1;i<=n;i++){
18 sum+=p[i][x[i]]*q[x[i]][i]; 19 } 20 if(sum>answer){ 21 answer=sum; 22 for(int i=1;i<=n;i++){ 23 best[i]=x[i]; 24 } 25 } 26 } 27 void backtrace(int level){ 28 if(level>n){ 29 update(); 30 31 } 32 else{ 33 for
(int i=level;i<=n;i++){ 34 swap(x[level],x[i]); 35 backtrace(level+1); 36 swap(x[level],x[i]); 37 } 38 } 39 } 40 int main() 41 { 42 43 cin >> n; 44 memset(p,0,sizeof(p)); 45 memset(q,0,sizeof(q)); 46 memset(best,0,sizeof(best)); 47 memset(x,0,sizeof
(x)); 48 for(int i=1;i<=n;i++){ 49 for(int j=1;j<=n;j++){ 50 cin >> p[i][j]; 51 } 52 } 53 for(int i=1;i<=n;i++){ 54 for(int j=1;j<=n;j++){ 55 cin >> q[i][j]; 56 } 57 } 58 for(int i=1;i<=n;i++){ 59 x[i]=i; 60 } 61 backtrace(1); 62 cout << answer << endl; 63 for(int i=1;i<=n;i++){ 64 cout << best[i]<< " "; 65 } 66 return 0; 67 }

技術分享圖片

運動員最佳配對問題