8604运动员最佳配对问题.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8604运动员最佳配对问题

8604?运动员最佳配对问题时间限制:1000MS? 内存限制:1000K提交次数:0 通过次数:0题型: 编程题???语言: 无限制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]。设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。编程任务:设计一个算法,对于给定的男女运动员竞赛优势,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。如下面sample的数据:?P=?10 2 3?2 3 4?3 4 5?Q=?2 2 2?3 5 3?4 5 1?最大的男女双方竞赛优势总和为:10*2 + 4*5 + 4*3 = 52?最佳搭配为:(女1,男1)(女2,男3)(女3,男2)?Input输入数据第一行有1 个正整数n (1≤n≤10)。接下来的2n行,每行n个数。前n行是P,后n行是Q。Output将计算出的男女双方竞赛优势的总和的最大值输出。Sample Input310 2 32 3 43 4 52 2 23 5 34 5 1Sample Output52Hint让男队员按自己编号顺序站定,女运动员和他们搭配的各种组合就是女运动员的各种排列。(如果你让女运动员按编号顺序站定,男运动员各种排列和她们搭配,也可以!)因此,搜索的解空间树是“排列树”。搜索的算法可以参考书本上“批处理作业调度问题”一节或“旅行售货员问题”的解法,因为都是排列树的搜索。ProviderzhengchanSource Code#includeiostreamusing namespace std;int **P=NULL;int **Q=NULL;int *x=NULL;int sum=0; //记录男女双方竞赛优势的总和的最大值 int n;//交换两个数void Swap(int *b,int *y){ int z; z=*b; *b=*y; *y=z;}//求男女双方竞赛优势总和最大值函数void Sum() {int s=0; //记录当前男女双方竞赛优势总和 for(int j=0;jn;j++) s+=P[j][x[j+1]-1]*Q[x[j+1]-1][j]; if(s=sum) sum=s; //输出值}//回溯法搜索排列树void Backtrack(int t){ if(tn) Sum(); //当到叶子节点时 else for(inti=t;i=n;i++) { //没有约束函数和限界函数的全排列问题 Swap(x[t],x[i]); Backtrack(t+1); //进行第t+1个男运动员配对 Swap(x[t],x[i]); }}int main(){inti,j;int t=1;cinn; //动态分配数组空间 x=new int[n+1]; for(i=0;in+1;i++) x[i]=i; //P,Q分配n行n列:从第0行0列到第n-1行第n-1列 P=new int*[n]; for(i=0;in;i++) P[i]=new int[n]; Q=new int*[n]; for(i=0;in;i++) Q[i]=new int[n]; for(i=0;in;i++) for(j=0;jn;j++)cinP[i][j]; for(i=0;in;i++) for(j=0;jn;j++)cinQ[i][j]; Backtrack(t);coutsum; //输出男女双方

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档