Problem Description

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

Sample Output

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2255

******************************************************

题意:n行,每行n个数,第i行第j个数表示第i个人对第j间房子的出价,求怎么卖能卖出最大收入值

分析:带权匹配模板。KM算法。
AC代码:

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
#include<algorithm>
#include<cmath>
#include<iostream> using namespace std;
typedef long long LL; #define INF 0x3f3f3f3f
#define N 420
#define MAXN 100000000
#define mod 1000000007 int maps[N][N],n,p;
int vx[N],vy[N],vis[N];///vis[i]表示y集合中的点是否匹配;
int lx[N],ly[N],ss[N]; int Hungary(int s)
{
int i;
vx[s]=;
for(i=; i<=n; i++)
{
if(vy[i]==&&maps[s][i]==lx[s]+ly[i])
{
vy[i]=;
if(vis[i]==||Hungary(vis[i])==)
{
vis[i]=s;
return ;
}
}
else
ss[i]=min(ss[i],lx[s]+ly[i]-maps[s][i]);
}
return ;
} int KM()
{
int i,j; memset(vis,,sizeof(vis));
memset(lx,,sizeof(lx));
memset(ly,,sizeof(ly)); for(i=; i<=n; i++)
for(j=; j<=n; j++)
lx[i]=max(lx[i], maps[i][j]); for(i=; i<=n; i++)
{
for(j=; j<=n; j++)
ss[j]=INF;
while()
{
memset(vx,,sizeof(vx));
memset(vy,,sizeof(vy));
if(Hungary(i))
break;
int d=INF;
for(j=; j<=n; j++)
if(vy[j]==)
d=min(d,ss[j]);
for(j=; j<=n; j++)
{
if(vx[j])
lx[j]-=d;
if(vy[j])
ly[j]+=d;
}
}
}
int ans=;
for(i=; i<=n; i++)
ans+=maps[vis[i]][i]; return ans;
} int main()
{
int i,j; while(scanf("%d",&n) != EOF)
{
for(i=; i<=n; i++)
for(j=; j<=n; j++)
scanf("%d", &maps[i][j]);
printf("%d\n", KM());
}
return ;
}

HDU - 2255 奔小康赚大钱(最大带权匹配)的更多相关文章

  1. HDU 2255 奔小康赚大钱(带权二分图最大匹配)

    HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...

  2. [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)

    奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...

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

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

  4. HDU 2255.奔小康赚大钱 最大权匹配

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

  5. HDU 2255 奔小康赚大钱 (KM算法 模板题)

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

  6. HDU 2255 ——奔小康赚大钱——————【KM算法裸题】

    奔小康赚大钱 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Statu ...

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

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

  8. hdu_2255_奔小康赚大钱(KM带权二分匹配板子)

    题目连接:hdu_2255_奔小康赚大钱 存个板子 /* 其实在求最大 最小的时候只要用一个模板就行了, 把边的权值去相反数即可得到另外一个.求结果的时候再去 相反数即可,最大最小有一些地方不同.. ...

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

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

随机推荐

  1. WinForm 基础

    今天,我开始学习了WinForm.WinForm是客户端程序制作 - C/S,它必须在.NET Framework框架上运行 . 开始,我先学习了一下WinForm的常用窗体属性. 布局:AutoSc ...

  2. ngrok内网穿透神器

    ngrok类似国内的花生壳,可以将本地的内网映射到公网上,这样就可以做web开发,微信开发了.下面就介绍下ngrok是怎么配置的吧. 方式一: 一.打开ngrok的官网https://ngrok.co ...

  3. vs2008编译FileZilla服务端源码

    vs2008编译FileZilla服务端源码 FileZilla服务端下载地址:https://download.filezilla-project.org/server/.FileZilla服务端源 ...

  4. python_实现_斐波那契额函数

    在学递归的时候,用递归实现了一个 下面是代码 def fib(n): if n >= 3: return fib(n-1)+fib(n-2) else: return 1 print(fib(6 ...

  5. echarts 折柱混合图 (绑数据后)

    html: <div class="flot-chart-content" id="flot-dashboard-chart"></div&g ...

  6. Design Pattern——Factory_DP

    namespace TEST { //用于生成一个对应的操作类,这个工厂只是用来产生操作类的,不做其他只用 public class Factory { public Operate GetOpetr ...

  7. # 欢迎使用Markdown编辑器写博客

    似的发射点 甜甜 他inn他 absct{ for i 士大夫似的 胜多负少 import os import sys import subprocess import textwrap if sys ...

  8. 纯 CSS 实现三角形尖角箭头的实例

    上次无意中发现了个使用纯 CSS 实现三角形尖角箭头的方法 http://blog.csdn.net/zhouzme/article/details/18901943 ,但没有怎么用上,也没有详细完整 ...

  9. compute post expression

    #include<iostream> #include<stack> #include<string> using namespace std; //post ex ...

  10. Servlet图片上传

    package com.servlet; import java.io.DataInputStream; import java.io.FileOutputStream; import java.io ...