hdu2255

2024-02-02 23:18
文章标签 hdu2255

本文主要是介绍hdu2255,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

链接:点击打开链接

题意:给一个n*n的矩阵,每个数表示第i个村名对第j间房出的价格,问最后最大价格是多少

代码:

#include <iostream>
#include <climits>                              //这个头文件含有int的上限,因此可以调用INT_MAX
#include <string.h>                             //INT_MAX=2147483647
#include <stdio.h>
#include <algorithm>
using namespace std;
int s[305][305],match[305],visx[305],visy[305];
int lx[305],ly[305];
int n;
int hungarian(int x){int i,j;visx[x]=1;for(i=1;i<=n;i++){if(!visy[i]&&lx[x]+ly[i]==s[x][i]){visy[i]=1;if(!match[i]||hungarian(match[i])){match[i]=x;return 1;}}}return 0;
}
void KM(){int i,j,k,temp;memset(lx,0,sizeof(lx));memset(ly,0,sizeof(ly));for(i=1;i<=n;i++)for(j=1;j<=n;j++)lx[i]=max(lx[i],s[i][j]);for(i=1;i<=n;i++){while(1){memset(visx,0,sizeof(visx));memset(visy,0,sizeof(visy));if(hungarian(i))break;else{temp=INT_MAX;for(j=1;j<=n;j++)if(visx[j])for(k=1;k<=n;k++)if(!visy[k]&&temp>lx[j]+ly[k]-s[j][k])temp=lx[j]+ly[k]-s[j][k];for(j=1;j<=n;j++){if(visx[j])lx[j]-=temp;if(visy[j])ly[j]+=temp;}}}}
}                                           //KM算法模板
int main(){                                 //这道题就是二分图最优匹配,也就用到了KM算法,我理解int i,j,sum;                            //的KM算法就是先全部选择最大利润的匹配,之后必然有很while(scanf("%d",&n)!=EOF){             //大几率出现有多个同时匹配一个的情况,因此之后选择移memset(match,0,sizeof(match));      //损失利润最小的情况,直到全部匹配for(i=1;i<=n;i++)                   //我就是看下面这个博客学习的,链接:for(j=1;j<=n;j++)                   //http://philoscience.iteye.com/blog/1754498scanf("%d",&s[i][j]);KM();sum=0;for(i=1;i<=n;i++)sum+=s[match[i]][i];printf("%d\n",sum);}return 0;
}



这篇关于hdu2255的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/672289

相关文章

hdu2255 奔小康赚大钱

题目链接:hdu2255 题目大意: (额题意是中文的并不是很想打呢) 多组数据 给定一个 n n n,表示有 n n n间房子,也表示有 n n n个人。然后 n n n行每行 n n n个数,第 i i i行表示第 i i i个人对这 n n n间房子给出的价格。问村长应该怎么安排哪个人买哪间房能使他的收入最大。求最大的收入值。 题解: KM模板题 我都忘光了而已(卑微 #include<

HDU2255 奔小康赚大钱【二分图 带权最优匹配】

奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14706    Accepted Submission(s): 6394   Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长

HDU2255 奔小康赚大钱(二分图的最大完备匹配,KM算法)

Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子。 这可是一件大事,关系到人民的住房问题啊。村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子住的话,容易引起不安定因素),每家必须分配到一间房子且只能得到一间房子。 另一方面,村长和另外的村领导希望得到最大的效益,这样村里的机构才会有钱.由于老