HDUOJ---------2255奔小康赚大钱
奔小康赚大钱
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2575 Accepted Submission(s): 1135
无奈,只好用KM来做,结果很理想!....
/*@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奔小康赚大钱的更多相关文章
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
- 最大流增广路(KM算法) HDOJ 2255 奔小康赚大钱
题目传送门 /* KM:裸题第一道,好像就是hungary的升级版,不好理解,写点注释 KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接Xi,Yj有权w(i ...
- 二分图最大权匹配问题&&KM算法讲解 && HDU 2255 奔小康赚大钱
作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...
- HDU 2255.奔小康赚大钱 最大权匹配
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 2255 ——奔小康赚大钱——————【KM算法裸题】
奔小康赚大钱 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- [ACM] HDU 2255 奔小康赚大钱 (二分图最大权匹配,KM算法)
奔小康赚大钱 Problem Description 传说在遥远的地方有一个很富裕的村落,有一天,村长决定进行制度改革:又一次分配房子. 这但是一件大事,关系到人民的住房问题啊. 村里共同拥有n间房间 ...
- hdu 2255 奔小康赚大钱 (KM)
奔小康赚大钱Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- hdu 2255 奔小康赚大钱 最大权匹配KM
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ...
随机推荐
- python2 和 python3兼容写法
一:使用ImportError,Python3中将一些Python2的模块名称做了修改,需要我们做一些处理来保证代码在不同Python版本中能够正常运行 # -*- coding: utf- -*- ...
- Rabbit MQ UI 重置 用户名 密码
新增admin用户 rabbitmqctl add_user newadmin s0m3p4ssw0rd rabbitmqctl set_user_tags newadmin administrato ...
- C++ Explicit Constructors(显式构造函数)
C++ 为类(Class)提供了许多默认函数.如果自己没有申明,编译器会为我们提供一个copy构造函数.一个copy assignment操作符和一个析构函数.此外,如果没有申明任何构造函数,编译器会 ...
- EasyUI-datagrid-自动合并单元格
1.目标 1.1表格初始化完成后,已经自动合并好需要合并的行: 1.2当点击字段排序后,重新进行合并: 2.实现 2.1 引入插件 /** * author ____′↘夏悸 * create dat ...
- 关于ListView中getView被重复调用的问题
我用ListView显示数据时,自定义了一个适配器(extends ArrayAdapter),然后重写了getView方法,现在出现一个问题,就是这个getView()方法被重复调用了,比如我的_d ...
- Android -- Gradle
使用gradle的目的 更容易重用资源和代码: 可以更容易创建不同的版本的程序,多个类型的apk包: 更容易配置,扩展; 更好的IDE集成; Gradle基本结构 使用ide创建的gradle构建的项 ...
- 【Hadoop】Combiner的本质是迷你的reducer,不能随意使用
问题提出: 众所周知,Hadoop框架使用Mapper将数据处理成一个<key,value>键值对,再网络节点间对其进行整理(shuffle),然后使用Reducer处理数据并进行最终输出 ...
- idea 设置代码的颜色
- (C++)i++和++i,哪个效率高一些
在看<程序员面试笔试宝典>时,发现了这样一个问题,书中只给出了++i的效率高一些,但并没有给出具体的解释和说明. 在网上找到下面的答案: 1.从高级层面上解释 ++i 是i=i+1,表达式 ...
- 翻译记忆软件-塔多思TRADO经典教程_3
一.创建思迪术语库 1."开始>程序"中打开程序的主界面 2.按窗口内的"术语库"图标,或者"术语库"菜单"维护一个术语库数 ...