Lightoj1011 - Marriage Ceremonies
| Time Limit: 2 second(s) | Memory Limit: 32 MB |
You work in a company which organizes marriages. Marriages are not that easy to be made, so, the job is quite hard for you.
The job gets more difficult when people come here and give their bio-data with their preference about opposite gender. Some give priorities to family background, some give priorities to education, etc.
Now your company is in a danger and you want to save your company from this financial crisis by arranging as much marriages as possible. So, you collect N bio-data of men and N bio-data of women. After analyzing quite a lot you calculated the priority index of each pair of men and women.
Finally you want to arrange N marriage ceremonies, such that the total priority index is maximized. Remember that each man should be paired with a woman and only monogamous families should be formed.
Input
Input starts with an integer T (≤ 100), denoting the number of test cases.
Each case contains an integer N (1 ≤ n ≤ 16), denoting the number of men or women. Each of the next N lines will contain N integers each. The jth integer in the ith line denotes the priority index between the ith man and jth woman. All the integers will be positive and not greater than 10000.
Output
For each case, print the case number and the maximum possible priority index after all the marriages have been arranged.
Sample Input |
Output for Sample Input |
|
2 2 1 5 2 1 3 1 2 3 6 5 4 8 1 2 |
Case 1: 7 Case 2: 16 |
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<vector>
7 using namespace std;
8 typedef long long LL;
9 typedef unsigned long long ll;
10 int dp[2][1<<16];
11 int ma[17][17];
12 typedef struct pp
13 {
14 int x;
15 int id;
16 } ss;
17 vector<ss>vec[12][1<<16];
18 int main(void)
19 {
20 int i,j,k,p,q;
21 int s;
22 for(i=5; i<=16; i++)
23 {
24 for(j=(1<<(i-1)); j<1<<16; j++)
25 {
26 int ans=0;
27 int uu=j;
28 while(uu)
29 {
30 if(uu%2)ans++;
31 uu/=2;
32 }
33 if(ans==i)
34 {
35 for(s=1; s<=16; s++)
36 {
37 if(((1<<(s-1))&j))
38 {
39 ss dd;
40 dd.x=(1<<(s-1)^j);
41 dd.id=s;
42 vec[i-5][j].push_back(dd);
43 }
44 }
45 }
46 }
47 }
48 scanf("%d",&k);
49 for(s=1; s<=k; s++)
50 {
51 scanf("%d",&p);
52 for(i=1; i<=p; i++)
53 {
54 for(j=1; j<=p; j++)
55 {
56 scanf("%d",&ma[i][j]);
57 }
58 }
59 int u;
60 int maxx=0;
61 memset(dp,0,sizeof(dp));
62 for(i=1; i<=4&&i<=p; i++)
63 { int k=i%2;
64 for(j=(1<<(i-1)); j<(1<<p); j++)
65 {
66 for(u=1; u<=p; u++)
67 {
68 if((1<<(u-1))&j)
69 {
70 int z=(1<<(u-1))^j;
71 dp[k][j]=max(dp[k][j],dp[(k+1)%2][z]+ma[i][u]);
72 maxx=max(dp[k][j],maxx);
73 }
74 }
75 }
76 }
77 for(i=5; i<=(p); i++)
78 {
79 int k=i%2;
80 for(j=(1<<(i-1)); j<(1<<p); j++)
81 {
82 for(u=0; u<vec[i-5][j].size(); u++)
83 {
84 ss kk=vec[i-5][j][u];
85 if(kk.id<=p)
86 {
87 dp[k][j]=max(dp[k][j],dp[(k+1)%2][kk.x]+ma[i][kk.id]);
88 maxx=max(dp[k][j],maxx);
89 }
90 }
91 }
92 }
93 printf("Case %d: ",s);
94 printf("%d\n",maxx);
95 }
96 return 0;
97 }
|
Developed and Maintained by
JANE ALAM JAN |
Copyright 2012
LightOJ, Jane Alam Jan |
Lightoj1011 - Marriage Ceremonies的更多相关文章
- (状压) Marriage Ceremonies (lightOJ 1011)
http://www.lightoj.com/volume_showproblem.php?problem=1011 You work in a company which organizes mar ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- Marriage Ceremonies LightOJ - 1011
Marriage Ceremonies LightOJ - 1011 常规状压dp.popcount(S)表示S集合中元素数量.ans[S]表示S中的女性与前popcount(S)个男性结婚的最大收益 ...
- Lightoj 1011 - Marriage Ceremonies
You work in a company which organizes marriages. Marriages are not that easy to be made, so, the job ...
- Light OJ 1011 - Marriage Ceremonies(状压DP)
题目大意: 有N个男人,和N个女人要互相匹配,每个男人和每个女人有个匹配值. 并且匹配只能是1对1的. 问所有人都匹配完成,最大的匹配值是多少? 状压DP,暴力枚举就OK了, 这个题目略坑,因为他 ...
- light oj 1011 - Marriage Ceremonies
题目大意: 给出n*n的矩阵Map,Map[i][j]代表第i个男人和第j个女人之间的满意度,求男女一一配对后,最大的满意度之和. 题目思路:状态压缩 题目可看做每行取一点,所有点不同列的情况下,各个 ...
- light oj 1011 - Marriage Ceremonies (状态压缩+记忆化搜索)
题目链接 大概题意是有n个男的n个女的(原谅我这么说,我是粗人),给你一个n*n的矩阵,第i行第j列表示第i个女(男)对第j个男(女)的好感度,然后要安排n对相亲,保证都是正常的(无搞基百合之类的), ...
- lightoj刷题日记
提高自己的实力, 也为了证明, 开始板刷lightoj,每天题量>=1: 题目的类型会在这边说明,具体见分页博客: SUM=54; 1000 Greetings from LightOJ [简单 ...
- The Stable Marriage Problem
经典稳定婚姻问题 “稳定婚姻问题(The Stable Marriage Problem)”大致说的就是100个GG和100个MM按照自己的喜欢程度给所有异性打分排序.每个帅哥都凭自己好恶给每个MM打 ...
随机推荐
- 日常Java 2021/11/13
Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ...
- day28 进程(Process)
day28 进程(Process) 1.进程的概念 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. # 进程是系统进行 ...
- 零基础学习java------day18------properties集合,多线程(线程和进程,多线程的实现,线程中的方法,线程的声明周期,线程安全问题,wait/notify.notifyAll,死锁,线程池),
1.Properties集合 1.1 概述: Properties类表示了一个持久的属性集.Properties可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串 一个属性列表可包含另 ...
- Nginx流量拷贝
1. 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能: 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问: 这跟灰度发布还 ...
- ES在项目中的测试
1.application.yml server: port: ${port:40100}spring: application: name: xc-search-servicexuecheng: e ...
- contrller层的编码设设计流程以及详细配置
/** 实际开发中遵循一个规律:自己写的类使用注解,系统提供的类使用配置文件 1.书写controller类----->配置springmvc.xml-------->配置web ...
- 【力扣】922. 按奇偶排序数组 II
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数. 对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数:当 A[i] 为偶数时, i 也是偶数. 你可以返回任何满足上述条件的数组 ...
- MySQL安装详细教程(数据库免安装版)
MySQL安装详细教程(数据库免安装版)mysql-5.7.33-winx64.zip 一.软件下载 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产 ...
- collection库更新1.4.0版本
collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本. 这个版本做了几个事情: 增加了三种类 ...
- Jenkins检测Maven项目是否引用快照包
目录 一.简介 二.具体 一.简介 生产环境不允许使用快照包,但人为规定终究不如脚本进行检测,所以在打war包,检测是否引用了快照包,如果引用了宣布打包失败 二.具体 1.在pipeline的scri ...
