運動員最佳配對問題
阿新 • • 發佈:2018-12-28
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 }
運動員最佳配對問題