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 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事 ...
随机推荐
- wireshark抓取本地回环及其问题
一:The NPF driver isn't running 这个错误是因为没有开启NPF服务造成的. NPF即网络数据包过滤器(Netgroup Packet Filter,NPF)是Winpcap ...
- 【BZOJ】【2595】【WC2008】游览计划
Orz zky神犇http://blog.csdn.net/iamzky/article/details/42029921 spfa的灵活应用!(好像是求了一个叫做斯坦纳树的东西……) o(︶︿︶)o ...
- SpringMVC处理方法的数据绑定
一.SpringMVC数据绑定流程 Spring MVC通过反射机制对目标处理方法的签名进行解析,将请求消息中的信息以一定的方式转换并绑定到处理方法的入参中.数据绑定的核心部件是DataBinder, ...
- Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
总结:继承.分类(Category.extension).协议(protocol) 一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...
- 第二十一章 springboot + 定时任务
1.application.properties #cron job.everysecond.cron=0/1 * * * * * job.everytensecond.cron=0/10 * * * ...
- fdisk 分区格式化为ext4格式分区
第一步:添加硬盘/新建分区(fdisk) 第二步:格式化分区(mkfs.ext4) 第三步:加载分区(mount) 1.第一步:添加硬盘/新建分区(fdisk) a.查看当前系统所有硬盘及分区情况:f ...
- 【注解】Annotation Target ElementType
背景知识 Annotate.Annotation:注释.注解.批注.注 在java中,注解作为程序的元数据嵌入到程序当中,元数据标签的存在并不影响程序代码的编译和执行. 所谓Annotation就是提 ...
- 理解js中的new
new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassic ...
- Volley框架的介绍使用
Volley是在2013年的Google I/O 2013大会上发布的,是我们的网络通信更快,更简单,更方便.对于初学者来讲是一个很好的框架. 简单来说,它提供了如下的便利功能: JSON,图像等的异 ...
- Android -- 文件扫描
启动MediaScanner服务,扫描媒体文件,程序通过发送下面的Intent启动MediaScanner服务. 扫描指定文件 public void scanFile(Context ctx, St ...