Time Limit: 1000/1000 MS (Java/Others)

Memory Limit: 32768/32768 K (Java/Others)

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算法的裸题,不解释上代码

  1. #include <cstring>
  2. #include <cmath>
  3. #include <cstdlib>
  4. #include <cstdio>
  5. #include <queue>
  6. #include <iostream>
  7. #include <algorithm>
  8. using namespace std;
  9. const int INF = 0x3f3f3f3f;
  10. const int Max = 301;
  11. int Map[Max][Max];
  12. int lx[Max],ly[Max];
  13. int link[Max],stac[Max];
  14. bool visx[Max],visy[Max];
  15. int n;
  16. bool find(int u)
  17. {
  18. visx[u] = true;
  19. for(int i =1;i<=n;i++)
  20. {
  21. if(visy[i]) continue;
  22. int ans =lx[u]+ly[i]-Map[u][i];
  23. if(ans==0)
  24. {
  25. visy[i] = true;
  26. if(link[i]==-1||find(link[i]))
  27. {
  28. link[i] = u;
  29. return true;
  30. }
  31. }
  32. else stac[i] = min(stac[i],ans);
  33. }
  34. return false;
  35. }
  36. int KM()
  37. {
  38. memset(link,-1,sizeof(link));
  39. memset(ly ,0 , sizeof(ly));
  40. for(int i = 1;i<=n;i++)
  41. {
  42. lx[i] = -INF;
  43. for(int j = 1;j<=n;j++)
  44. {
  45. lx[i] = max(lx[i],Map[i][j]);
  46. }
  47. }
  48. for(int i= 1; i <= n; i++)
  49. {
  50. for(int j = 1; j<= n; j++)
  51. {
  52. stac[j] = INF;
  53. }
  54. while(1)
  55. {
  56. memset(visx,false,sizeof(visx));
  57. memset(visy,false,sizeof(visy));
  58. if(find(i))
  59. {
  60. break;
  61. }
  62. int d = INF;
  63. for(int j = 1; j <= n; j++)
  64. {
  65. if(visy[j]) continue;
  66. d = min(d,stac[j]);
  67. }
  68. for(int j = 1; j <= n; j++)
  69. {
  70. if(visx[j]) lx[j]-=d;
  71. if(visy[j]) ly[j]+=d;
  72. else stac[j]-=d;
  73. }
  74. }
  75. }
  76. int ans = 0 ;
  77. for(int i = 1; i <= n; i++)
  78. {
  79. if(link[i]!=-1)
  80. {
  81. ans += Map[link[i]][i];
  82. }
  83. }
  84. return ans;
  85. }
  86. int main()
  87. {
  88. while(~scanf("%d",&n))
  89. {
  90. for(int i = 1; i <= n; i++)
  91. {
  92. for(int j = 1; j <= n; j++)
  93. {
  94. scanf("%d", &Map[i][j]);
  95. }
  96. }
  97. printf("%d\n",KM());
  98. }
  99. return 0;
  100. }

【HDU2255】奔小康赚大钱-KM算法的更多相关文章

  1. hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)

    /** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...

  2. hdu2255 奔小康赚大钱 KM 算法

    参见这里 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...

  3. HDU - 2255 奔小康赚大钱 KM算法 模板题

    HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...

  4. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

  5. hdu 2255 奔小康赚大钱 KM算法

    看到这么奇葩的题目名我笑了,后来这么一个裸的KM调了2小时我哭了…… 这是个裸的KM算法,也没什么多说的,主要是注意多组数据时,每次都要把各种数组清空啊,赋值啊什么的,反正比较麻烦.至于为什么调了2小 ...

  6. HDU 2255 奔小康赚大钱 KM算法的简单解释

    KM算法一般用来寻找二分图的最优匹配. 步骤: 1.初始化可行标杆 2.对新加入的点用匈牙利算法进行判断 3.若无法加入新编,修改可行标杆 4.重复2.3操作直到找到相等子图的完全匹配. 各步骤简述: ...

  7. hdu-2255 奔小康赚大钱---KM模板

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2255 题目大意: Problem Description 传说在遥远的地方有一个非常富裕的村落,有一 ...

  8. hdu 2255奔小康赚大钱 KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=2255 一,KM算法:(借助这个题写一下个人对km的理解与km模板) KM算法主要是用来求解图的最优匹 ...

  9. HDU 2255 奔小康赚大钱 KM算法题解

    KM算法求的是完备匹配下的最大权匹配,是Hungary算法的进一步,由于Hungary算法是最大匹配的算法,不带权. 经典算法,想不出来的了,要參考别人的.然后消化吸收吧. 由于真的非常复杂的算法. ...

随机推荐

  1. MyEclipse设置像visual studio一样的智能提示

    打开 Eclipse  -> Window -> Perferences -> Java -> Editor -> Content Assist, 在右边最下面一栏找到 ...

  2. css定位 与position

    本文同时发表于本人个人网站 www.yaoxiaowen.com 在正式讨论position之前,我们需要知道几个概念. 块元素:独占一行的元素.比如div,h1~h6,p等,它是自带换行的. 内联元 ...

  3. Oracle知识分类之常见规范

    命名规范 变量规范 1.入参,统一以I_前缀开头,且不能省略IN 2.出参,统一以O_前缀开头 3.局部变量,统一以V_前缀开头 4.常量,统一以CN_前缀开头 5.游标,统一以CUR_前缀开头 组成 ...

  4. WordPress基础:固定链接的设置

    安装wordpressp后的工作之一最好修改固定链接,原因就是wp默认的/?p=123形式不利于搜索引擎优化而且也不美观. URL结构参数说明:%year%:日志发表的年份,如2009%monthnu ...

  5. Echarts学习笔记之饼图

    注:ECHarts的相关文件请到ECharts官网下载,下载地址:http://echarts.baidu.com/download.html 1.前台 <div style="ali ...

  6. CentOS 7 yum方式配置LAMP环境

    环境:CentOS 7 最小化安装 采用Putty连接 方法:采用YUM安装方法 目的:搭建Apache+Mysql+PHP环境 1,安装Apache yum install httpd //默认情况 ...

  7. Python —条件语句

    条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非空(null ...

  8. Molile App(HTTP/HTML)—Analyze Traffic

  9. 【进展】LL谱面存储方式的改善

    今天得某位高人相助,获得了一堆LL里面的标准谱面文件,是json格式的.于是折腾了一下午加一晚上,总算让SLP正确解析了json格式的谱面.

  10. appframework3.0(JQmobi)入门教程

    2015-03-31 22:02 2011人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. appframework3.0好像是3月24日发布的,今天31号,发现和 ...