题目请戳这里

题目大意:给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最大带权匹配)的更多相关文章

  1. 奔小康赚大钱---hdu2255(最大带权匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 带权匹配问题的模板: 运用KM算法: #include<stdio.h> #incl ...

  2. 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)

    [POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS   Memory Limit ...

  3. 二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】

    二分图算法包括 匈牙利算法 与 KM算法. 匈牙利算法 在这里写上模板. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 #include< ...

  4. HDU - 2255 奔小康赚大钱(最大带权匹配)

     Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...

  5. poj 2195(KM求最小权匹配)

    题目链接:http://poj.org/problem?id=2195 思路:我们都知道KM使用来求最大权匹配的,但如果要求最小权匹配,只需把图中的权值改为负值,求一次KM,然后权值和取反即可. ht ...

  6. HDU2255 奔小康赚小钱钱(二分图-最大带权匹配)

    传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房子 ...

  7. POJ3565带权匹配——km算法

    题目:http://poj.org/problem?id=3565 神奇结论:当总边权最小时,任意两条边不相交! 转化为求二分图带权最小匹配. 可以用费用流做.但这里学一下km算法. https:// ...

  8. KM算法 带权二分匹配 O(n^3)

    #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #inclu ...

  9. KM(Kuhn-Munkres)算法求带权二分图的最佳匹配

    KM(Kuhn-Munkres)算法求带权二分图的最佳匹配 相关概念 这个算法个人觉得一开始时有点难以理解它的一些概念,特别是新定义出来的,因为不知道是干嘛用的.但是,在了解了算法的执行过程和原理后, ...

随机推荐

  1. python everything is object

    python面向对象非常彻底,即使过程式的代码风格,python在运作的时候也是面向对象的.everything is object. 差异 在面向对象的理念上,python和非常工程化的面向对象语言 ...

  2. 微信开发python+django两个月的成功经历,django是个好框架!

        时间:大三 上学期没有用微信内置浏览器而纯对话开发,坑了自己好一下. 下学期选错bottle框架,以为轻量好,谁知开发中什么都自己来很痛苦. 选对了框架django,终于在大三最后的个把月里写 ...

  3. linux 监控系统缓存和cpu

    a=`free |head -n 2 |tail -n 1 |awk '{print $7}'`if [ $a -ge 900000 ];then     sync && echo 1 ...

  4. C# RSA

    using System; using System.Security.Cryptography; using System.Text; class RSACSPSample { static voi ...

  5. 简单概述 .NET Framework 各版本区别

    目前已发行的版本有1.0.1.1.2.0.3.0.3.5.4.0.4.5(及4.5.1.4.5.2).4.6(及4.6.1). 1.0版本:最初的.net framework版本,作为一个独立的工具包 ...

  6. srand((double)microtime()*1000000)

    分为4个步骤1:执行microtime(),获取当前的微秒数 2:把获取的微秒数转换为double类型 3:再用转换后的数字去乘以1000000 4:给随机数发生器播种,播种数为第三步得出的结果 ra ...

  7. jquery如何判断div是否隐藏--useful

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. oracle 查询dblink的方法

    oracle 查询dblink的方法: SYSDBA登录, sys登录 SELECT * FROM SYS.link$;

  9. ArrayList的toArray

    ArrayList提供了一个将List转为数组的一个非常方便的方法toArray.toArray有两个重载的方法: 1.list.toArray(); 2.list.toArray(T[]  a); ...

  10. Sublime Text 3 配置

    配置: { "font_face": "Source Code Pro", , "highlight_line": true, " ...