奔小康赚大钱

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

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
开始使用的是分组背包,但是悲剧啦,啦啦啦, 无奈,只好用KM来做,结果很理想!....
分组背包超时,但是还是贴上代码ba!...
代码:

 /*@code龚细军*/
#include<stdio.h>
#include<string.h>
#define maxn 301
int peo[maxn][maxn];
int dp[maxn]; int max(int const a,int const b)
{
return a>b?a:b;
} int main()
{
int i,n,j,k;
while(scanf("%d",&n)!=EOF)
{
memset(dp,,(n+)*sizeof(int));
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
scanf("%d",&peo[i][j]);
}
for(i=;i<=n;i++)
{
for(j=n;j>=;j--)
{
for(k=;k<=j;k++)
{
dp[k]=max(dp[k],dp[j-k]+peo[i][k]);
}
} }
printf("%d\n",dp[n]);
}
return ;
}

下面是有km最大匹配算法来做的。。。。

代码:

//二分图最佳匹配,kuhn munkras算法,邻接阵形式,复杂度O(m*n*m);
/*返回最佳匹配值,传入二分图的大小,m,n和邻接阵mat,表示权值
 /*@coder龚细军*/
#include<stdio.h>
#include<string.h>
#define MAX 305
#define inf 1000000000 int km(int n, int mat[][MAX],int *match1,int *match2 )
{
int s[MAX],t[MAX],lx[MAX]={},ly[MAX],p,q,ret=,i,j,k;
for( i=; i<n ; i++)
{
for(lx[i]=-inf,j= ; j<n ;j++)
{
lx[i]=mat[i][j]>lx[i]?mat[i][j]:lx[i];
}
}
memset(ly,,n*sizeof(int)); /*节约大把的时间是不*/
memset(match1,0xff,sizeof(int)*n);
memset(match2,0xff,sizeof(int)*n);
for(i= ; i<n ;i++)
{
memset(t,0xff,sizeof(int)*n);
p=q=;
for(s[p]=i;p<=q&&match1[i]< ; p++)
{
for(k=s[p],j=; j<n&&match1[i]< ;j++)
{
if(lx[k]+ly[j]==mat[k][j]&&t[j]<)
{
s[++q]=match2[j];
t[j]=k;
if(s[q]<)
for(p=j ; p>= ; j=p)
{
match2[j]=k=t[j];
p=match1[k];
match1[k]=j;
}
}
}
}
if(match1[i]<)
{
for(i--,p=inf,k=; k<=q; k++)
{
for(j=; j<n; j++)
{
if(t[j]<&&lx[s[k]]+ly[j]-mat[s[k]][j]<p)
p=lx[s[k]]+ly[j]-mat[s[k]][j];
}
}
for(j=;j<n;ly[j]+=t[j]<?:p,j++);
for(k=; k<=q ; lx[s[k++]]-=p);
}
}
for(i=;i<n;i++)
{
ret+=mat[i][match1[i]];
}
return ret;
}
int map[MAX][MAX],aa[MAX],bb[MAX];
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
scanf("%d",&map[i][j]);
}
}
printf("%d\n",km(n,map,aa,bb));
}
return ;
}

HDUOJ---------2255奔小康赚大钱的更多相关文章

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

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

  2. 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱

    题目传送门 /* KM:裸题第一道,好像就是hungary的升级版,不好理解,写点注释 KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权w(i ...

  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. [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)

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

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

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

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

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

  10. hdu 2255 奔小康赚大钱 最大权匹配KM

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ...

随机推荐

  1. LeetCode: Implement strStr() [027]

    [题目] Implement strStr(). Returns a pointer to the first occurrence of needle in haystack, or null if ...

  2. eclipse无法启动

    -startupplugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar-showsplashorg.eclipse.platfo ...

  3. 用emoji表情包来可视化北京市历史天气状况!

    用emoji表情包来可视化北京市历史天气状况!   最近有了一个突如其来的想法,主要是看到了R社区有大神做了emoji表情包,并已经打通了ggplot的链接,所以想用ggplot结合emoji表情做一 ...

  4. Linux命令缩写来由

    A 命令 全称 功能 备注 apt AdvancedPackaging Tool APT用来自动下载,配置,安装二进制或者源代码格式的软件包   awk Aho Weiberger and Kerni ...

  5. tomcat怎么运行servlet程序

    新建一个web project 取名 myproject 在myproject 新建一个继承了HttpServlet 的类 MyServlet 重写HttpServlet 的 dopost doget ...

  6. 混沌数学之ASin模型

    相关软件:混沌数学之离散点集图形DEMO 相关代码: class ASinEquation : public DiscreteEquation { public: ASinEquation() { m ...

  7. js常用的事件对象

    事件源对象  event.srcElement.tagName  event.srcElement.type 捕获释放  event.srcElement.setCapture();   event. ...

  8. 8个对程序员来说有用的jQuery小贴士和技巧

    1) 禁用鼠标右键单击 jQuery程序员可以使用此代码在网页上禁用鼠标右键点击. 1 2 3 4 5 6 7 8 9 10 $(document).ready(function() {     // ...

  9. Android -- 获取IP和MAC地址

    通过InetAddress.getLocalHost()得到始终是“127.0.0.1”,要想得到真正的网络ip地址要通过下面的方法: 首先新建一个工程,修改AndroidManifest.xml文件 ...

  10. 字符串HASH 学习总结 &amp;&amp; 模板

    一.字符串HASH模板  取自挑战程序设计竞赛(第2版) </pre><pre code_snippet_id="446698" snippet_file_nam ...