• 1767运动员最佳匹配问题(搜索算法+剪枝)


    Description

    羽毛球队有男女运动员各n 人。给定2 个n×n 矩阵P 和Q。P[i][j]是男运动员i 和女运动员j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响,P[i][j]不一定等于Q[j][i]。男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[j][i]。
    设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。
    设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

    Input

    输入数据的第一行有1 个正整数n (1≤n≤20)。接下来的2n 行,每行n个数。前n行是p,后n行是q。

    Output

    将计算出的男女双方竞赛优势的总和的最大值输出。

    Sample

    Input 

    3
    10 2 3
    2 3 4
    3 4 5
    2 2 2
    3 5 3
    4 5 1

    Output 

    52

     1 #include <iostream>
     2 #include <string.h>
     3 
     4 using namespace std;
     5 
     6 int best[25], fit[25][25], book[25];
     7 int maxx;
     8 
     9 void dfs(int cur, int sum, int n)
    10 {
    11     if(cur==n+1) maxx = max(maxx, sum);
    12     else if(sum+best[n]-best[cur-1] <= maxx) return;
    13     else
    14     {
    15         int i;
    16         for(i=1;i<=n;i++)
    17         {
    18             if(book[i]==0)
    19             {
    20                 book[i] = 1;
    21                 dfs(cur+1, sum+fit[cur][i], n);
    22                 book[i] = 0;
    23             }
    24         }
    25     }
    26 }
    27 
    28 int main()
    29 {
    30     int n, i, j;
    31     int a[25][25], b[25][25];
    32     cin >> n;
    33     for(i=1;i<=n;i++)
    34     {
    35         for(j=1;j<=n;j++)
    36         {
    37             cin >> a[i][j];
    38         }
    39     }
    40     for(i=1;i<=n;i++)
    41     {
    42         for(j=1;j<=n;j++)
    43         {
    44             cin >> b[i][j];
    45         }
    46     }
    47     best[0] = 0;
    48     for(i=1;i<=n;i++)
    49     {
    50         best[i] = 0;
    51         for(j=1;j<=n;j++)
    52         {
    53             fit[i][j] = a[i][j] * b[j][i];
    54             best[i] = max(best[i], fit[i][j]);
    55         }
    56         best[i] += best[i-1];
    57     }
    58     memset(book, 0, sizeof(book));
    59     maxx = 0;
    60     dfs(1, 0, n);
    61     cout << maxx << endl;
    62     return 0;
    63 }
  • 相关阅读:
    JavaScript——实现compose函数
    Typora——如何画流程图 | mermaid-js
    Electron——复制文件操作
    JavaScript——实现一些常用函数
    vue elementUI表单主动trigger某个rules校验
    [java]多线程——多线程debug调试(非常非常详细的调试)
    CompletableFuture supplyAsync() and thenApply() 用法区别
    CAS和MySql乐观锁实现下单
    TiDB集群手动安装
    Vue中 let _this = this的作用
  • 原文地址:https://www.cnblogs.com/0xiaoyu/p/14100564.html
Copyright © 2020-2023  润新知