hdu3722Card Game(KM最大带权匹配)
题目大意:给n个字符串,再给一个n的排列:p1,p2....pn。然后将第i个字符串贴到第pi个字符串后面,然后形成一个环。pi的首字符和第i个字符串的末尾字符就相邻,如果这2个字符相等,各自再向内延伸一个位置,知道这个环首尾字符不等为止。延伸的位置为该环的得分(如果pi == i,得分为0),对于每个排列,有n个这样的环,求得分和最大为多少。
题目分析:最大带权匹配!!以为是个字符串的题目,就没仔细看。。。
建图直接跑模版。。。
详情请见代码:
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N = 205;
const int M = 1005;
const int inf = 0x3f3f3f3f;
char s[N][M];
int n;
int lx[N],ly[N],w[N][N];
bool cx[N],cy[N];
int match[N];
int slack;
int getw(int x,int y)
{
int i,j;
i = strlen(s[x]) - 1;
j = 0;
int lenj = strlen(s[y]) - 1;
int ret = 0;
while(i >= 0 && j <= lenj && s[x][i] == s[y][j])
i --,j ++,ret ++;
return ret;
}
void predeal()
{
int i,j;
for(i = 1;i <= n;i ++)
{
for(j = 1;j <= n;j ++)
if(i == j)
w[i][j] = 0;
else
w[i][j] = getw(i,j);
}
}
bool path(int u)
{
cx[u] = true;
for(int v = 1;v <= n;v ++)
{
if(cy[v] == false)
{
int t = lx[u] + ly[v] - w[u][v];
if(t)
{
if(slack > t)
slack = t;
}
else
{
cy[v] = true;
if(match[v] == -1 || path(match[v]))
{
match[v] = u;
return true;
}
}
}
}
return false;
}
void KM()
{
int ans = 0;
int i,j;
for(i = 1;i <= n;i ++)
{
lx[i] = -inf;
ly[i] = 0;
for(j = 1;j <= n;j ++)
if(lx[i] < w[i][j])
lx[i] = w[i][j];
}
memset(match,-1,sizeof(match));
for(i = 1;i <= n;i ++)
{
while(1)
{
memset(cx,false,sizeof(cx));
memset(cy,false,sizeof(cy));
slack = inf;
if(path(i))
break;
for(j = 1;j <= n;j ++)
{
if(cx[j])
lx[j] -= slack;
if(cy[j])
ly[j] += slack;
}
}
}
for(i = 1;i <= n;i ++)
ans += w[match[i]][i];
printf("%d\n",ans);
}
int main()
{
while(scanf("%d",&n) != EOF)
{
for(int i = 1;i <= n;i ++)
scanf("%s",s[i]);
predeal();
KM();
}
return 0;
}
hdu3722Card Game(KM最大带权匹配)的更多相关文章
- 奔小康赚大钱---hdu2255(最大带权匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 带权匹配问题的模板: 运用KM算法: #include<stdio.h> #incl ...
- 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)
[POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS Memory Limit ...
- 二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】
二分图算法包括 匈牙利算法 与 KM算法. 匈牙利算法 在这里写上模板. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 #include< ...
- HDU - 2255 奔小康赚大钱(最大带权匹配)
Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...
- poj 2195(KM求最小权匹配)
题目链接:http://poj.org/problem?id=2195 思路:我们都知道KM使用来求最大权匹配的,但如果要求最小权匹配,只需把图中的权值改为负值,求一次KM,然后权值和取反即可. ht ...
- HDU2255 奔小康赚小钱钱(二分图-最大带权匹配)
传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子 ...
- POJ3565带权匹配——km算法
题目:http://poj.org/problem?id=3565 神奇结论:当总边权最小时,任意两条边不相交! 转化为求二分图带权最小匹配. 可以用费用流做.但这里学一下km算法. https:// ...
- KM算法 带权二分匹配 O(n^3)
#include<cstdio> #include<cstdlib> #include<cstring> #include<string> #inclu ...
- KM(Kuhn-Munkres)算法求带权二分图的最佳匹配
KM(Kuhn-Munkres)算法求带权二分图的最佳匹配 相关概念 这个算法个人觉得一开始时有点难以理解它的一些概念,特别是新定义出来的,因为不知道是干嘛用的.但是,在了解了算法的执行过程和原理后, ...
随机推荐
- BeanUtils的日期问题
//注册日期类型转换器 //第一种 自定义方法 ConvertUtils.register(new Converter(){ //第一个参数是目标 ...
- MySql数据库3【优化4】连接设置的优化
1.wait_timeout / interactive_timeout 连接超时 服务器关闭连接之前等待活动的秒数.MySQL所支持的最大连接数是有限的,因为每个连接的建立都会消耗内存,因此我们希 ...
- bom type:Phantom
bom的类型 'type': fields.selection([('normal','Normal BoM'),('phantom','Sets / Phantom')], 'BoM Type', ...
- jquery ZeroClipboard实现黏贴板功能,兼容所有浏览器
两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家做不到,真的是对自己的要求太低,如果对自己要求多一点,那么你取得的进步可能 ...
- js两个时间相减
平常总会遇到需要算两个日期之间是多少天,以下是使用JavaScript算时间差多少天的: // 给日期类对象添加日期差方法,返回日期与diff参数日期的时间差,单位为天 Date.prototype. ...
- winform布局格式
一.默认布局 ★可以加panel,也可以不加: ★通过鼠标拖动控件的方式,根据自己的想法布局.拖动控件的过程中,会有对齐的线,方便操作: ★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整 ...
- Unity NGUI 网络斗地主 -界面制作
Unity NGUI 网络斗地主 -界面制作 源文件在群(63438968群共享!) @灰太龙 这一节说一下NGUI的界面摆放,并且教会大家使用NGUI的自适应功能! 在这里感谢@Gamer,是他给我 ...
- WSS存储服务器(Windows Storage Server) 2012新功能解析
虽然最近一段时间有关微软的新闻大多数集中在Windows 8以及Surface平板设备身上,但数周之前Windows Server 2012新版本中所包含的Windows Storage Server ...
- ZOJ-2112-Dynamic Rankings(线段树套splay树)
题意: 完成两个操作: 1.询问一个区间里第k小的数: 2.修改数列中一个数的值. 分析: 线段树套平衡树,线段树中的每个节点都有一棵平衡树,维护线段树所记录的这个区间的元素.这样处理空间上是O(nl ...
- Qt入门(12)——Qt国际化
应用的国际化就是使应用成为能被非本国的人使用的过程.有的情况下,国际化很简单,例如,使一个US应用可被Australian或者British用户理解,工作可能少于几个拼写修正.但是使一个US应用可以被 ...