题目链接

奔小康赚大钱

Time Limit: 1000/1000MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7350 Accepted Submission(s): 3263

Problem Description

传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。
这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。
另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱.由于老百姓都比较富裕,他们都能对每一间房子在他们的经济范围内出一定的价格,比如有3间房子,一家老百姓可以对第一间出10万,对第2间出2万,对第3间出20万.(当然是在他们的经济范围内).现在这个问题就是村领导怎样分配房子才能使收入最大.(村民即使有钱购买一间房子但不一定能买到,要看村领导分配的).

Input
输入数据包含多组测试用例,每组数据的第一行输入n,表示房子的数量(也是老百姓家的数量),接下来有n行,每行n个数表示第i个村名对第j间房出的价格(n<=300)。

Output
请对每组数据输出最大的收入值,每组的输出占一行。

Sample Input

2
100 10
15 23

Sample Output

123

Source

HDOJ 2008 Summer Exercise(4)- Buffet Dinner

分析:建图,做最大权匹配。

KM算法:
我的理解:

其实初始化最大,但是不一定能够做到刚好匹配,于是,用到了松弛,和顶标的概念。slack是松弛函数,利用不在交错树中的Y顶点stack最小的一个,去修改顶标来松弛,直到可以加入更多的边。

Code(C++):

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 330;
const int INF = 0x3f3f3f3f;int N,NX,NY;
int match[MAXN],lx[MAXN],ly[MAXN],slack[MAXN];
int visx[MAXN],visy[MAXN];
int Map[MAXN][MAXN];bool FindPath(int u)
{visx[u] = true;for(int i = 1; i <= NY; ++i){if(visy[i])continue;int temp = lx[u] + ly[i] - Map[u][i];if(temp == 0){visy[i] = true;if(match[i] == -1 || FindPath(match[i])){match[i] = u;return true;}}else if(slack[i] > temp)slack[i] = temp;}return false;
}int KM()
{memset(ly,0,sizeof(ly));memset(lx,-1,sizeof(lx));memset(match,-1,sizeof(match));for(int i = 1; i <= NX; ++i){for(int j = 1; j <= NY; ++j)if(Map[i][j] > lx[i])lx[i] = Map[i][j];}for(int i = 1; i <= NX; ++i){for(int j = 1; j <= NY; ++j)slack[j] = INF;while(1){memset(visx,0,sizeof(visx));memset(visy,0,sizeof(visy));if(FindPath(i))break;int d = INF;for(int j = 1; j <= NY; ++j)if(!visy[j] && d > slack[j])d = slack[j];for(int j = 1; j <= NX; ++j)if(visx[j])lx[j] -= d;for(int j = 1; j <= NY; ++j)if(visy[j])ly[j] += d;elseslack[j] -= d;}}int res = 0;for(int i = 1; i <= NY; ++i)if(match[i] > -1)res += Map[match[i]][i];return res;
}int main()
{int N;while(~scanf("%d",&N)){NX = NY = N;for(int i = 1; i <= N; ++i)for(int j = 1; j <= N; ++j)scanf("%d",&Map[i][j]);printf("%d\n",KM());}return 0;
}

转载于:https://www.cnblogs.com/TreeDream/p/5767873.html

HDU(2255),KM算法,最大权匹配相关推荐

  1. KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home

    最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大.解决这个问题可以用KM算法.理解KM算法需要首先理解"可行顶标"的概念.可行顶标是指关于二分图 ...

  2. hdu 2853Assignment (二分图的最大权匹配)

    //hdu2853 //二分图的最大权匹配,图中有一些边,在等权值的条件下有优先选择权. //因为是选n个进行匹配,我们将每条边的权值扩大(n+1)倍,这样每条边相对大小是一样的 //对于有优先选择权 ...

  3. 奔小康赚大钱 hdu 2255( KM )

    http://acm.split.hdu.edu.cn/showproblem.php?pid=2255 带权匹配问题: #include <stdio.h> #include <a ...

  4. KM算法(DFS版,优化DFS版,BFS版)

    KM算法的前提是图存在一个完备匹配,因此用于二分图的最佳匹配问题.如果是最大权匹配问题,可以通过加权值为0的边来可以将图的最佳匹配与最大全匹配统一起来:如果是最小权匹配问题,可以通过加权值为-INF的 ...

  5. UVALive 2238 Fixed Partition Memory Management 固定分区内存管理(KM算法,变形)

    题意:目前有一部分可用内存,分为m个大小固定的区域.现有n个程序要执行,每个程序在不同大小的内存中运行所需的时间不同,要使运行完所有程序所耗时最少,问每个程序在哪块区域中从什么时间运行到什么时间,以及 ...

  6. [KM算法]hdoj 2426:Interesting Housing Problem

    大致题意: 有n个小孩要去m间屋子,每间屋子只能住一个人.每个小孩都会对一些屋子打分.已知每个小孩不能去那些他打负分和没打分的屋子,求安排住宿后所有人对自己屋子打分之和最大值是多少. 大致思路: KM ...

  7. 二分图最大权匹配问题KM算法讲解 HDU 2255 奔小康赚大钱

    作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...

  8. hdu 2255二分图最大权值匹配的KM 算法

    对KM的深入理解请看以下博客(写的不错的):http://blog.sina.com.cn/s/blog_691ce2b701016reh.html 我的理解:如有错误,请大牛指正!! 1.KM()算 ...

  9. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

最新文章

  1. R语言ggplot2可视化增大图例字体实战
  2. SAP WM 2-Step Picking的TO单据特殊的地方
  3. Java知多少(42)泛型通配符和类型参数的范围
  4. Object.entries(obj)
  5. 计算机编码技术ppt,计算机编码技术.ppt
  6. go语言学习(一)——go语言简介和环境搭建
  7. 剑指offer 算法 (知识迁移能力2)
  8. Interface Builder nib2objc ibtool
  9. (七)webStorage使用实例——webStorage作为简易数据库来使用
  10. Entity Data Model (EDM) 深入分析, Part 3
  11. (转微软网站)如何安装 Microsoft Dynamics CRM 4.0 具有最低必需权限
  12. 蠢货别忘(一)common lisp funcall
  13. Windows7查看无线网络密码
  14. 【poj1284-Primitive Roots】欧拉函数-奇素数的原根个数
  15. 别被IBM抛出的“认知商业”搞晕 这里为你详解
  16. win10搭建无盘服务器配置,win10电脑搭建无盘工作站
  17. 常用互联网协议之TCP/IP协议
  18. 解析2016中国智慧城市发展新趋势
  19. St. Luke’s University Health Network是世界首批试用远程患者管理解决方案Masimo SafetyNet™来协助COVID-19住院患者的机构之一
  20. R - 小鑫の日常系列故事(七)——小纸条

热门文章

  1. 卫生间防水应注意哪些问题?
  2. 网店如何提高顾客的回购率?
  3. 无数老板做企业还在卖产品赚差价
  4. 学会学习比学习什么更重要
  5. 为什‮多很了学么‬营销‮识知‬依然赚不到钱?
  6. 如果买一辆二手的劳斯莱斯在三线城市跑婚车,多久能回本?
  7. 计算机网络之数据通信基础知识
  8. 利用iptabls的NFLOG记录自己的HTTP HTTPS上网行为
  9. geoiplookup命令没有任何输出问题
  10. power bi可视化表_在Power BI报表视图中创建可视化