HDU3718 Similarity KM
原文链接http://www.cnblogs.com/zhouzhendong/p/8284763.html
题目传送门 - HDU3718
题意概括
直接描述输入吧
首先一个T(T<15),表示数据组数。
每组数据,首先三个数:len,k,m,分别表示接下来要读入的字符串的长度、每一个字符串中出现的不同字母个种类数、询问的字符串数。(len<=10000)(k<=26)(m<30)
然后一行一个标准串。(长度为len)
然后m行,每行一个询问串。(长度为len)
对于询问串,每一种字母可以对应一种字母,问在最优方案下,使得对应万之后满足询问串与标准串的对应位相同的位的个数除以len的值。
完(kou)美(hu)
题解
我想骂人。
容我说点难听的话。
这题的样例数据简直就是垃圾。
第46行的j++写成了i++居然过了样例然后实测无限TLE?
言归正传。
我们考虑每一个字母变成另一个字母得到的贡献,然后在这两个字母之间连一条边,边权为贡献。
然后貌似就是裸的KM了。
OK水题。
代码
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
const int INF=1e9+7;
const int N=30,L=10005;
int T,len,n,m,g[N][N];
char cor[L],now[L];
int ex[N],ey[N],minadd[N],match[N];
bool visx[N],visy[N];
bool Match(int x){
visx[x]=1;
for (int i=1;i<=n;i++)
if (!visy[i]){
int add=ex[x]+ey[i]-g[x][i];
if (!add){
visy[i]=1;
if (!match[i]||Match(match[i])){
match[i]=x;
return 1;
}
}
else
minadd[i]=min(minadd[i],add);
}
return 0;
}
int KM(){
memset(match,0,sizeof match);
memset(ex,0,sizeof ex);
memset(ey,0,sizeof ey);
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
ex[i]=max(ex[i],g[i][j]);
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++)
minadd[j]=INF;
while (1){
memset(visx,0,sizeof visx);
memset(visy,0,sizeof visy);
if (Match(i))
break;
int d=INF;
for (int j=1;j<=n;j++)
if (!visy[j])
d=min(d,minadd[j]);
for (int j=1;j<=n;j++){
if (visx[j])
ex[j]-=d;
if (visy[j])
ey[j]+=d;
else
minadd[j]-=d;
}
}
}
int ans=0;
for (int i=1;i<=n;i++)
ans+=g[match[i]][i];
return ans;
}
void readstr(char s[]){
char ch[5];
for (int i=1;i<=len;i++){
scanf("%s",ch);
s[i]=ch[0];
}
}
int main(){
scanf("%d",&T);
while (T--){
scanf("%d%d%d",&len,&n,&m);
n=26;
readstr(cor);
while (m--){
readstr(now);
memset(g,0,sizeof g);
for (int i=1;i<=len;i++)
g[now[i]-'A'+1][cor[i]-'A'+1]++;
printf("%.4lf\n",1.0*KM()/len);
}
}
return 0;
}
HDU3718 Similarity KM的更多相关文章
- HDU-3718 Similarity
题目只有26个字母,所以我们新建一个二分图,v[i][j]表示字母i对应字母j时能成功匹配的个数,给这个边矩阵v求个最大匹配就是答案. #include <cstdlib> #includ ...
- HDU 3718 Similarity(KM最大匹配)
HDU 3718 Similarity 题目链接 题意:给定一个标准答案字符串,然后以下每一行给一个串.要求把字符一种相应一种,要求匹配尽量多 思路:显然的KM最大匹配问题,位置相应的字符连边权值+1 ...
- [HDOJ3718]Similarity(KM算法,二分图最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3718 题意:有一堆答题情况和正确答案,问每一个答题情况的正确率最大是多少. 给每一对答案和答题情况的字 ...
- 【转】KM匹配题集
转自:http://blog.csdn.net/shahdza/article/details/7779324 [HDU]2255 奔小康赚大钱 模板题★1533 Going Home 模板题★242 ...
- 匈牙利算法与KM算法
匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...
- 机器学习中的相似性度量(Similarity Measurement)
机器学习中的相似性度量(Similarity Measurement) 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间 ...
- 【HDU2255】奔小康赚大钱-KM算法
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description ...
- cosine similarity
Cosine similarity is a measure of similarity between two non zero vectors of an inner product space ...
- [SimHash] find the percentage of similarity between two given data
SimHash algorithm, introduced by Charikarand is patented by Google. Simhash 5 steps: Tokenize, Hash, ...
随机推荐
- HTML之Position用法
在此,先做声明,本篇仅是摘录自互联网,个人认为这篇文章讲的很不错,附于此地与大家共同欣赏. position的四个属性值: 1.relative2.absolute3.fixed4.static下面分 ...
- python并发编程之IO模型,
了解新知识之前需要知道的一些知识 同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调 ...
- linux符号与正则表达式
特殊符号 > 或者1> 标准输出重定向 先把文件的内容清空 再放入新的内容 >> 或 2>> 追加重定向 把内容放入文件的最后一行 1 ...
- java----String解析
String在内存中的分析: public class Demo { public static void main(String[] args){ String a = new String(&qu ...
- loadrunner出现报错operands of = have illegal types `pointer to char' and `int'
原始代码: void split(char * p,char * str){ /* 传入一个数组进行p和一个以什么进行分割的str,返回切片后的值 */ int i = 0, j = 0; char ...
- Android 第一波
1. Devik进程,Linux进程,线程的区别 说一说对 SP 频繁操作有什么后果? SP 能存储多少数据? SP 的底层其实是由xml文件来实现的,操作 SP 的过程其实就是xml的序列化和反序列 ...
- windows下使用Play框架
play类似于Spring这里的web框架.特点:MVC.函数编程. 版本:play 2.1.3 一.play命令 #play ~compile 功能:持续编译.在cmd中运行这个命令,只要 ...
- Python os.walk() 方法遍历文件目录
概述 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. os.walk() 方法是一个简单易用的文件.目录遍历器,可以帮助我们高效的处理文件.目录方面的事情. 在Un ...
- file按钮美化成图片(纯HTML+CSS)
效果图: 代码实现: html: <div> <h2>上传头像</h2> <p class="fs18">(请上传200X200px ...
- caffe关闭建立网络的log输出
C++ google::InitGoogleLogging("XXX"); google::SetCommandLineOption("GLOG_minloglevel& ...