HDU-2255 奔小康赚大钱 简单KM
来源:互联网 发布:northwind数据库下载 编辑:程序博客网 时间:2024/04/30 12:27
奔小康赚大钱
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
KM裸题,没什么需要特别注意的。
#include<bits/stdc++.h>using namespace std;#define CL(x,v); memset(x,v,sizeof(x));#define INF 0x3f3f3f3f#define MAXN 310int Left[MAXN];int w[MAXN][MAXN];int Lx[MAXN],Ly[MAXN];bool S[MAXN],T[MAXN];int N;bool match(int i){ S[i]=true; for(int j=1;j<=N;j++)if(abs(Lx[i]+Ly[j]-w[i][j])<1e-5&&!T[j]) { T[j]=true; if(Left[j]==0||match(Left[j])) { Left[j]=i; return true; } } return false;}void update(){ int a=INF; for(int i=1;i<=N;i++)if(S[i]) for(int j=1;j<=N;j++)if(!T[j]) a=min(a,Lx[i]+Ly[j]-w[i][j]); for(int i=1;i<=N;i++){ if(S[i])Lx[i]-=a; if(T[i])Ly[i]+=a; }}void KM(){ for(int i=1;i<=N;i++){ Left[i]=Lx[i]=Ly[i]=0; for(int j=1;j<=N;j++) { Lx[i]=max(Lx[i],w[i][j]); } } for(int i=1;i<=N;i++){ for(;;){ CL(S,0); CL(T,0); if(match(i))break; else update(); } } int res = 0; for(int i = 1;i <= N;i++) { if(Left[i] > 0) res += w[Left[i]][i]; } printf("%d\n",res);}int main(){ //freopen("h2255.in","r",stdin); while(~scanf("%d",&N)) { for(int i = 1;i <= N;i++) { for(int j = 1;j <= N;j++) { scanf("%d",&w[i][j]); } } KM(); } return 0;}
0 0
- HDU-2255 奔小康赚大钱 简单KM
- HDU 2255 奔小康赚大钱 KM算法
- hdu 2255 KM 奔小康赚大钱
- hdu 2255 奔小康赚大钱 (KM裸题)
- HDU 2255 奔小康赚大钱(KM模板)
- HDU-2255 奔小康赚大钱 裸KM
- hdu 2255 奔小康赚大钱 KM算法
- HDU 2255 奔小康赚大钱(KM)
- HDU 2255 奔小康赚大钱 KM模板
- hdu 2255 奔小康赚大钱 【km模板】
- hdu 2255 奔小康赚大钱(KM模板)
- hdu 2255 奔小康赚大钱 KM模板
- HDU 2255 奔小康赚大钱 KM裸题
- 【KM模板】HDU 2255 奔小康赚大钱
- [HDU 2255]奔小康赚大钱[KM算法]
- hdu 2255 奔小康赚大钱 KM算法
- HDU 2255 奔小康赚大钱(KM)
- HDU 2255奔小康赚大钱 km算法
- Ubuntu 服务配置(sysv-rc-conf)
- linux中配置共享文件夹(配置 samba 实现文件夹共享)
- CCNA笔记
- 黑马程序员——IO之序列化流详解
- Android 高清加载巨图方案
- HDU-2255 奔小康赚大钱 简单KM
- Android OkHttp完全解析 是时候来了解OkHttp了
- JMetal使用小记
- 宫崎骏和他的世界
- HDU1533-Going Home 简单KM
- okhttp去访问自签名的网站
- HDU1853-Cyclic Tour KM
- 黑马程序员——正则表达式及模式与匹配器对象
- HDU3488-Tour KM