【题解】P1559 运动员最佳匹配问题
[题目](https://www.luogu.com.cn/problem/P1559)
题目描述
羽毛球队有男女运动员各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≤20)。接下来的2n行,每行n个数。前n行是p,后n行是q。
输出格式
将计算出的男女双方竞赛优势的总和的最大值输出。
输入输出样例
输入
3
10 2 3
2 3 4
3 4 5
2 2 2
3 5 3
4 5 1
输出
52
分析
搜索
void dfs(int i, int sum)
从第一个男生开始搜索他与那个女生配对
F(j,1,n){
if(!vis[j]){
vis[j] = 1;
dfs(i + 1, sum + p[i][j] * q[j][i]);
vis[j] = 0;
}
}
搜索到第n个男生时,用得到的优势值更新答案
if(i == n + 1){
ans = max(ans, sum);
return;
}
————不出意料TLE
考虑剪枝
用max_sco[i]记录第i个男生与女生配对得到的最大优势值(是的,不考虑分配,就是那个最大的p[i][j]*q[j][i])
F(i,1,n){
F(j,1,n){
max_sco[i] = max(max_sco[i], p[i][j] * q[j][i]);
}
}
如果往下搜索时,能得到的最大优势值(其实是得不到的,只是找了个上限)比当前ans还小,那它怎么也更新不了ans,剪掉
int max_ans = sum;
F(j,i,n) max_ans += max_sco[j];
if(max_ans < ans) return;
AC代码
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define F(i,a,b) for(int i=a;i<=b;i++)
#define UF(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
typedef long long ll;
const int N = 25;
int n, p[N][N], q[N][N], ans, max_sco[N];
bool vis[N];
void dfs(int i, int sum){
if(i == n + 1){
ans = max(ans, sum);
return;
}
int max_ans = sum;
F(j,i,n) max_ans += max_sco[j];
if(max_ans < ans) return;
F(j,1,n){
if(!vis[j]){
vis[j] = 1;
dfs(i + 1, sum + p[i][j] * q[j][i]);
vis[j] = 0;
}
}
}
int main()
{
std::cin >> n;
F(i,1,n){
F(j,1,n) cin >> p[i][j];
}
F(i,1,n){
F(j,1,n) cin >> q[i][j];
}
F(i,1,n){//400
F(j,1,n){
max_sco[i] = max(max_sco[i], p[i][j] * q[j][i]);
}
}
dfs(1,0);
cout << ans << endl;
return 0;
}
【题解】P1559 运动员最佳匹配问题的更多相关文章
- [洛谷 P1559] 运动员最佳匹配问题
题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...
- P1559 运动员最佳匹配问题[最大费用最大流]
题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...
- P1559 运动员最佳匹配问题
题目描述 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势 ...
- 洛谷p1559运动员最佳匹配问题
题目 搜索 可行性剪枝 虽然这题目是我搜二分图的标签搜到的 但是n比较小 明显可以暴力 然而只有80分 再加上可行性剪纸就行啦 就是记所有运动员他所能匹配到的最大值. 在我们搜索到第i层的时候 如果他 ...
- KM模板 最大权匹配(广搜版) Luogu P1559 运动员最佳匹配问题
KM板题: #include <bits/stdc++.h> using namespace std; inline void read(int &num) { char ch; ...
- P1559 运动员最佳匹配问题 by hyl 天梦
#include<iostream> using namespace std; int n; int maxx[21][21]; int lie[21]; int aa[21]; int ...
- Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配)
Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配) Description 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的 ...
- 运动员最佳匹配问题 KM算法:带权二分图匹配
题面: 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势. ...
- [Luogu 1559]运动员最佳匹配问题
Description 题库链接 求 \(2\times N\) 个点的带权二分图最佳匹配. \(1\leq N\leq 20\) Solution 我还是太菜了啊...到现在才学 \(KM\) . ...
随机推荐
- css label两端对齐
上面这种效果很常见,实现的代码如下: html部分 <ul> <li class="detail_item"> <span class="d ...
- .Net Core Web Api实践(三).net core+Redis+docker实现Session共享
前言:上篇文章介绍了.net core+Redis+IIS+nginx实现Session共享,本来打算直接说明后续填坑过程,但毕竟好多坑是用docker部署后出现的,原计划简单提一下.net core ...
- Task 线程重用导致等待!
测试代码: ; i < ; i++) { var d = DateTime.Now; Task.Run(() => { Console.WriteLine($"{Thread.C ...
- cogs 49. 跳马问题 DFS dp
49. 跳马问题 ★ 输入文件:horse.in 输出文件:horse.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 有一只中国象棋中的 “ 马 ” ,在半张 ...
- Mixing Milk 混合牛奶 USACO 贪心
1009: 1.3.1 Mixing Milk 混合牛奶 时间限制: 1 Sec 内存限制: 128 MB提交: 9 解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 1. ...
- java main 方法
public static void main(String[] args) { BigDecimal b1 = new BigDecimal(0.01000000); BigDecimal b2 = ...
- 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块
Log4a 基于AOP和ThreadLocal实现的一个简单Http API日志记录模块 github地址 : https://github.com/EalenXie/log4a 在API每次被请求时 ...
- Nginx在Centos 7中配置开机启动
1.创建脚本 # vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the Nginx HTTP Server # it is v ...
- Java入门 - 语言基础 - 04.对象和类
原文地址:http://www.work100.net/training/java-object-class.html 更多教程:光束云 - 免费课程 对象和类 序号 文内章节 视频 1 概述 2 J ...
- 60 个让程序员崩溃的瞬间,太TM真实了
前方高能!笑死人不偿命系列~ 表演即将开始,吃东西的请停下来,不然你会后悔的 1. 公司实习生找 Bug 2. 在调试时,将断点设置在错误的位置 3. 当我有一个很棒的调试想法时 4. 偶然间看到自己 ...