HDUOJ---------2255奔小康赚大钱
奔小康赚大钱
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
HDOJ 2008 Summer Exercise(4)- Buffet Dinner
开始使用的是分组背包,但是悲剧啦,啦啦啦,
无奈,只好用KM来做,结果很理想!....
分组背包超时,但是还是贴上代码ba!...
代码:
1 /*@code龚细军*/
2 #include<stdio.h>
3 #include<string.h>
4 #define maxn 301
5 int peo[maxn][maxn];
6 int dp[maxn];
7
8 int max(int const a,int const b)
9 {
10 return a>b?a:b;
11 }
12
13 int main()
14 {
15 int i,n,j,k;
16 while(scanf("%d",&n)!=EOF)
17 {
18 memset(dp,0,(n+1)*sizeof(int));
19 for(i=1;i<=n;i++)
20 {
21 for(j=1;j<=n;j++)
22 scanf("%d",&peo[i][j]);
23 }
24 for(i=1;i<=n;i++)
25 {
26 for(j=n;j>=0;j--)
27 {
28 for(k=0;k<=j;k++)
29 {
30 dp[k]=max(dp[k],dp[j-k]+peo[i][k]);
31 }
32 }
33
34 }
35 printf("%dn",dp[n]);
36 }
37 return 0;
38 }
下面是有km最大匹配算法来做的。。。。
代码:
//二分图最佳匹配,kuhn munkras算法,邻接阵形式,复杂度O(m*n*m);
/*返回最佳匹配值,传入二分图的大小,m,n和邻接阵mat,表示权值
1 /*@coder龚细军*/
2 #include<stdio.h>
3 #include<string.h>
4 #define MAX 305
5 #define inf 1000000000
6
7 int km(int n, int mat[][MAX],int *match1,int *match2 )
8 {
9 int s[MAX],t[MAX],lx[MAX]={0},ly[MAX],p,q,ret=0,i,j,k;
10 for( i=0; i<n ; i++)
11 {
12 for(lx[i]=-inf,j=0 ; j<n ;j++)
13 {
14 lx[i]=mat[i][j]>lx[i]?mat[i][j]:lx[i];
15 }
16 }
17 memset(ly,0,n*sizeof(int)); /*节约大把的时间是不*/
18 memset(match1,0xff,sizeof(int)*n);
19 memset(match2,0xff,sizeof(int)*n);
20 for(i=0 ; i<n ;i++)
21 {
22 memset(t,0xff,sizeof(int)*n);
23 p=q=0;
24 for(s[p]=i;p<=q&&match1[i]<0 ; p++)
25 {
26 for(k=s[p],j=0; j<n&&match1[i]<0 ;j++)
27 {
28 if(lx[k]+ly[j]==mat[k][j]&&t[j]<0)
29 {
30 s[++q]=match2[j];
31 t[j]=k;
32 if(s[q]<0)
33 for(p=j ; p>=0 ; j=p)
34 {
35 match2[j]=k=t[j];
36 p=match1[k];
37 match1[k]=j;
38 }
39 }
40 }
41 }
42 if(match1[i]<0)
43 {
44 for(i--,p=inf,k=0; k<=q; k++)
45 {
46 for(j=0; j<n; j++)
47 {
48 if(t[j]<0&&lx[s[k]]+ly[j]-mat[s[k]][j]<p)
49 p=lx[s[k]]+ly[j]-mat[s[k]][j];
50 }
51 }
52 for(j=0;j<n;ly[j]+=t[j]<0?0:p,j++);
53 for(k=0; k<=q ; lx[s[k++]]-=p);
54 }
55 }
56 for(i=0;i<n;i++)
57 {
58 ret+=mat[i][match1[i]];
59 }
60 return ret;
61 }
62 int map[MAX][MAX],aa[MAX],bb[MAX];
63 int main()
64 {
65 int n,i,j;
66 while(scanf("%d",&n)!=EOF)
67 {
68 for(i=0;i<n;i++)
69 {
70 for(j=0;j<n;j++)
71 {
72 scanf("%d",&map[i][j]);
73 }
74 }
75 printf("%dn",km(n,map,aa,bb));
76 }
77 return 0;
78 }
- js最新手机号码、电话号码正则表达式
- iOS afnetworking最新版报错 没有AFHTTPRequestOperationManager类了
- Android Service学习之本地服务
- iOS .pch文件的使用
- CountDownTimer说明及使用
- UiTextField对输入的长度进行限制并提示用户还可输入的长度
- Spring Cloud实战小贴士:turbine如何聚合设置了context-path的hystrix数据
- iOS 查找字符串 相同 子字符串的位置 range
- 自然语言处理指南(第四部分)
- 史上最强Spring mvc入门
- 上边半透明的效果并且显示的是上一页的内容
- Spring Cloud构建微服务架构:Hystrix监控数据聚合【Dalston版】
- android自定义view实现公章效果
- ios app url scheme跳转到淘宝商品详情页 唤醒app
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- dotnet 里的那些锁 AutoResetEvent 用法
- MySQL是如何实现事务的ACID
- 白话K8S核心组件概念
- k8s 架构、基本概念及命令
- Java API 连接 Hbase示例
- 点线图和阶梯图的画法
- 添加直线的两种方式
- nginx fastcgi模块ngx_http_fastcgi_module详细解析、使用手册、完整翻译
- Chrome代码调试指南
- Maven安装与配置
- CentOS7安装elk,并监控Nginx的access.log日志
- Aria2 + Rclone 实现离线下载 | 完美脚本配置 | 解决无法上传问题
- alpine使用的避坑指南
- elasticSearch学习(八)
- Python自学成才之路 魔术方法之比较运算符,赋值运算符