奔小康赚大钱

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

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<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
#define ll long long
#define mod 998244353
const int N=;
const int INF=0x3f3f3f3f;
int nx,ny;
int g[N][N];
int linker[N],lx[N],ly[N];
int slack[N];
bool visx[N],visy[N];
bool dfs(int x){
visx[x]=true;
for(int y=;y<ny;y++){
if(visy[y]) continue;
int tmp=lx[x]+ly[y]-g[x][y];
if(tmp==){
visy[y]=true;
if(linker[y]==-||dfs(linker[y])){
linker[y]=x;
return true;
}
}else if(slack[y]>tmp){
slack[y]=tmp;
}
}
return false;
}
int KM(){
memset(linker,-,sizeof(linker));
memset(ly,,sizeof(ly));
for(int i=;i<nx;i++){
lx[i]=-INF;
for(int j=;j<ny;j++){
if(g[i][j]>lx[i]){
lx[i]=g[i][j];
}
}
}
for(int x=;x<nx;x++){
for(int i=;i<ny;i++)
slack[i]=INF;
while(true){
memset(visx,false,sizeof(visx));
memset(visy,false,sizeof(visy));
if(dfs(x)) break;
int d=INF;
for(int i=;i<ny;i++){
if(!visy[i]&&d>slack[i])
d=slack[i];
}
for(int i=;i<nx;i++){
if(visx[i])
lx[i]-=d;
}
for(int i=;i<ny;i++){
if(visy[i]) ly[i]+=d;
else slack[i]-=d;
}
}
}
int res=;
for(int i=;i<ny;i++){
if(linker[i]!=-)
res+=g[linker[i]][i]; }
return res;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
for(int i=;i<n;i++){
for(int j=;j<n;j++){
scanf("%d",&g[i][j]);
}
}
nx=ny=n;
printf("%d\n",KM());
}
return ;
}

最新文章

  1. 给ros安装arbotix simulator仿真环境
  2. 【opencv】图片标注文字
  3. hdu2072 字典树
  4. 怎么利用CSS3绘制三角形
  5. 【Warshall_Floyd】
  6. Displaying Alerts with UIAlertView
  7. jquery 的新使用用法
  8. 微信Demo导入遇到的问题
  9. Redis + Jedis + Spring (list操作)
  10. 介绍一个C++奇巧淫技
  11. nodejs 递归创建目录
  12. IOS把图片缓存到本地的几种方法
  13. Spring初始化ApplicationContext线程托管实际运用架构构思
  14. android sdutio常用快捷键
  15. SD从零开始65 框架协议(Outline Agreement)
  16. win10系统如何关掉系统自动更新
  17. 洛谷 P10P1343 地震逃生 改错
  18. sqlserver binary varbinary image 的区别
  19. 十四. Python基础(14)--递归
  20. tesseract 中文二次训练

热门文章

  1. 几种flash存储芯片的用途和分类
  2. TMS320VC5509驱动AT24C02
  3. 设计模式 笔记 命令模式 Command
  4. NodeJS旅程 : express - nodejs MVC 中的王牌
  5. QQ快速登录协议分析以及风险反思
  6. Jmeter(四)_16个逻辑控制器详解
  7. opencv core组件进阶
  8. 比特币初始版本VC6.0编译
  9. wordpress学习四: 一个简单的自定义主题
  10. 2017-2018-2 1723《程序设计与数据结构》第三周作业 &amp; 实验一 总结