运动员最佳配对问题

西安交大 软件53 蔡少斐

题号:6_5

题目叙述:

羽毛球队有男女运动员各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]。

 

设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

 

编程任务:设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。

输入格式

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

 

输出格式

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

输入样例


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

输出样例

52 

题目解答:

       这道题目共有n!种配对情况,也就是相当于固定男运动员,然后对女运动员进行一次全排列,并求出对应的优势之和的最大值,本题可以用回溯法,也可以用分支限界法,在使用分支限界法的时候,关键是在于设计上界函数。

       在这里,我们把上界函数定义为:剩下的未配对的女运动员(不考虑男运动员配对情况下)所能达到的优势最大值之和(记为r)与当前配对已达到的优势(记为sum)之和。在程序里体现如下:


在一开始时候,r被初始化为:


其中maxout的定义为:


       在使用分支限界法的时候,一旦有一个叶节点出来,那么就立即结束算法,因为最先出来的叶节点必定是最优解。

代码实现:

#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
#include <cstdio>
usingnamespace std;
const int MAX = 20;
int          P[MAX][MAX];
int          Q[MAX][MAX];
int          maxout[MAX];
int          n;
structnode {int   id;int   sum;int   r;int   up;int   *x;
};
structcmp {bool operator()( node* a, node* b ){return(a->up < b->up);}
};
voidsolve()
{int                                      ans= 0;priority_queue<node*,vector<node*>, cmp>  que;node                                         *E = new node();E->id      =1;E->sum  =0;E->r       =0;E->up    =0;for ( int i = 1; i <= n; i++ ){E->r += maxout[i];}E->up    =E->r;E->x       =new int[n + 1];for ( int i = 1; i <= n; i++ ){E->x[i] = i;}while ( E->id != n + 1 ){for ( int i = E->id; i <= n;i++ ){node* nE = new node();nE->id    = E->id + 1;nE->x     = new int[n + 1];for ( int t = 1; t <= n;t++ ){nE->x[t] =E->x[t];}nE->x[E->id] = E->x[i];nE->x[i]  = E->x[E->id];nE->sum              = E->sum +P[E->id][nE->x[E->id]] * Q[nE->x[E->id]][E->id];nE->r            = E->r - maxout[E->id];nE->up         = nE->sum + nE->r;que.push( nE );}if ( !que.empty() ){E= que.top();que.pop();}else  {ans = 0;break;}}ans = E->sum;cout << ans << endl;
}intmain()
{cin >> n;for ( int i = 1; i <= n; i++ ){for ( int j = 1; j <= n; j++ ){cin >> P[i][j];}}for ( int i = 1; i <= n; i++ ){for ( int j = 1; j <= n; j++ ){cin >> Q[i][j];}}for ( int i = 1; i <= n; i++ ){int ma = 0;for ( int j = 1; j <= n; j++ ){ma = max( ma, Q[i][j] *P[j][i] );}maxout[i] = ma;}solve();return(0);
}/** 3* 10 2 3* 2 3 4* 3 4 5* 2 2 2* 3 5 3* 4 5 1*/


运行结果:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2217-[HAOI2007]分割矩阵【dfs,记忆化搜索】

正题 题目链接:https://www.luogu.org/problem/P2217 题目大意 a∗ba*ba∗b的矩阵&#xff0c;分成nnn个矩阵&#xff0c;求每个矩阵均方差最小&#xff0c;求答案。 解题思路 切n−1n-1n−1刀 设fk,x1,y1,x2,y2f_{k,x1,y1,x2,y2}fk,x1,y1,x2,y2​表示矩阵(x1,y1,x2,y2)(x1,y…

play框架入门操作

Play的基本特性&#xff1a;1、Play框架使用REST的开发风格&#xff0c;不用严格按照复杂的J2EE规范&#xff0c;是Java敏捷开发的首选。2、Play框架提供多种支持&#xff1a;NIO&#xff0c;JPA&#xff0c;Groovy以及各种工具类。3、Play框架会自动编译Java源文件&#xff0c…

动态规划练习1 [导弹拦截]

【问题描述】 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然 它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。某天&#xff0c;雷达捕捉到 敌国的导弹来袭。由于该…

TensorflowSharp 简单使用与KNN识别MNIST流程

机器学习是时下非常流行的话题&#xff0c;而Tensorflow是机器学习中最有名的工具包。TensorflowSharp是Tensorflow的C#语言表述。本文会对TensorflowSharp的使用进行一个简单的介绍。本文会先介绍Tensorflow的一些基本概念&#xff0c;然后实现一些基本操作例如数字相加等运算…

1、jquery事件绑定和委托的实现

jQuery的事件绑定和委托可以使用 on()、one()、bind()、live()、delegate()等方法实现。 1、on() &#xff1a; 语法&#xff1a;$(selector).on(event,childSelector,data,function) 作用&#xff1a;可以在被选元素及子元素上添加一个或多个事件处理程序&#xff0c;并且…

刷题bingo挑战赛1

前言 为了提高做题效率&#xff0c;最近发现了个玩bingo的好网站 https://bingosync.com 然后就有了这场bingobingobingo赛。 正题 生成代码 [ {"name":"P2638"},{"name":"P4265"},{"name":"P2331"},{"n…

动态规划练习2 [合唱队形]

N 位同学站成一排&#xff0c;音乐老师要请其中的 (N-K) 位同学出列&#xff0c;使得剩下的 K 位同学排成合唱队形。 合唱队形是指这样的一种队形&#xff1a;设 K 位同学从左到右依次编号为 1 &#xff0c; 2 …&#xff0c; K &#xff0c;他们的身高分别为 T1 &#x…

ASP.NET Core Web 支付功能接入 微信-扫码支付篇

这篇文章将介绍ASP.NET Core中使用 开源项目 Payment&#xff0c;实现接入微信-扫码支付及异步通知功能。开发环境&#xff1a;Win 10 x64、VS2017 15.6.4、.NET Core SDK 2.1.101、.NET Core Runtime 2.0.61.新建"ASP.NET Core Web 应用程序"项目&#xff0c;我将它…

jzoj3832-在哪里建酿酒厂【指针】

正题 题目链接:https://jzoj.net/senior/#main/show/3832 题目大意 一个环形的&#xff0c;知道每个城市分布的位置和需要的酒数。然后要求在一个位置建厂使得运输价格最低。 解题思路 我们将数据复制一份放到后面&#xff0c;然后枚举建厂位置。我们现在要找到一个包含该位…

14、java中的集合(1)

1、为什么使用集合 面向对象语言使用对象体现事物&#xff0c;存储对象可以使用数组&#xff0c;但是数组的长度是固定的&#xff0c;存储的对象类型单一&#xff0c;不适用需求的变化&#xff0c;所以提供了集合。 2、集合和数组的区别 1&#xff09;数组长度定义之后不能改…

动态规划练习3 [砝码称重]

【问题描述】 设有 1g 、 2g 、 3g 、 5g 、 10g 、 20g 的砝码各若干枚&#xff08;其总重 <1000 &#xff09;&#xff0c;用他们能称出的重量的种类数。 【输入文件】 a1 a2 a3 a4 a5 a6 &#xff08;表示 1g 砝码有 a1 个&#xff0c; 2g 砝码有 a2 个…

Microsoft AI - Custom Vision in C#

概述前面一篇 Microsoft AI - Custom Vision 中&#xff0c;我们介绍了 Azure 认知服务中的自定义影像服务&#xff1a;Custom Vision&#xff0c;也介绍了如果通过这个在线服务&#xff0c;可视化的完成项目创建、数据集上传和标注、模型训练、模型评估和测试。我们也提到&…

jzoj3833-平坦的折线【模型转换,LIS】

正题 题目链接:https://jzoj.net/senior/#contest/show/2930/3 题目大意 一个平面直角坐标系上有nnn个点&#xff0c;如果两个点之间斜率在−1∼1-1\sim 1−1∼1之间那么就可以连接&#xff0c;求最少多少条折线可以连接这些点。 解题思路 我们将整个坐标系逆时针选择45∘(4…

22、mysql主键自增值和偏移量的查看和修改

1、查看mysql自增值和偏移量 show variables like %increment%; auto_increment_increment1 -- 自增倍数是1 auto_increment_offset1 -- 偏移量是1 上边这是一般的设置&#xff0c;每次每次主键自增的倍数是1&#xff0c;偏移量是1 例如&#xff1a;插入第n条记录&#x…

动态规划训练5 [回文词]

【问题描述】 回文词是一种对称的字符串——也就是说&#xff0c;一个回文词&#xff0c;从左到右读和从右到左读得到的结果是一样 的。任意给定一个字符串&#xff0c;通过插入若干字符&#xff0c;都可以变成一个回文词。你的任务是写一个程序&#xff0c;求出将 给定字符串变…

Unity引擎及编辑器C#源代码发布

3月23日我们在GitHub上发布了Unity引擎和编辑器的C#源代码&#xff0c;仅供Unity学习参考使用。为何如此决定为了了解或改进自己的Unity项目&#xff0c;一直以来有用户对Unity .NET程序集反汇编&#xff0c;我们的服务条款明确允许这样做。但反汇编有二大缺点&#xff1a;尽管…

40、使用javassit操作运行时字节码文件

1、是什么 Javassit是一个功能包&#xff0c;作用类似于java的反射&#xff0c;用于操作运行时字节码文件&#xff0c;实现动态编程&#xff0c;但性能高于反射。 2、怎么用&#xff1f; 首先需要获取存放class文件的容器ClassPool&#xff0c;根据全类名获取一个CtClass对象…

jzoj3844-统计损失【树形dp,换根法】

正题 题目链接:https://jzoj.net/senior/#main/show/3844 题目大意 一棵树&#xff0c;求每条路径的点权乘积之和。 解题思路 若只考虑从xxx出发往子树的路径&#xff0c;那么有fxaxax∗∑x−>yfyf_xa_xa_x*\sum_{x->y}f_yfx​ax​ax​∗x−>y∑​fy​ 定义gig_ig…

动态规划训练6 [统计单词个数]

【问题描述】 给出一个长度不超过 200 的由小写英文字母组成的字母串 ( 约定&#xff1a;该字母串以每行 20 个字母的方式输 入&#xff0c;且保证每行一定为 20 个 ) 。要求将此字母串分成 k 份 (1<k<40) &#xff0c;且每份中包含的单词个数加起来总数 最大 ( …

k8s实战为aspnetcore.webapi微服务注入配置信息

1、浅析k8s配置信息Secret以密文的形式存储数据&#xff0c;可以用来保存一些敏感信息&#xff0c;例如&#xff1a;OAuth tokens、私钥、密码、数据库连接、事件总线连接等。ConfigMap以明文的形式存储数据&#xff0c;可以用来保存一些非敏感信息&#xff0c;例如&#xff1a…