博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FZU 2254 英语考试 (最小生成树)
阅读量:5062 次
发布时间:2019-06-12

本文共 1293 字,大约阅读时间需要 4 分钟。

在过三个礼拜,YellowStar有一场专业英语考试,因此它必须着手开始复习。

这天,YellowStar准备了n个需要背的单词,每个单词的长度均为m。

YellowSatr准备采用联想记忆法来背诵这n个单词:

1、如果YellowStar凭空背下一个新词T,需要消耗单词长度m的精力

2、如果YellowSatr之前已经背诵了一些单词,它可以选择其中一个单词Si,然后通过联想记忆的方法去背诵新词T,需要消耗的精力为hamming(Si, T) * w。

hamming(Si, T)指的是字符串Si与T的汉明距离,它表示两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。

由于YellowStar还有大量繁重的行政工作,因此它想消耗最少的精力背诵下这n个单词,请问它最少需要消耗多少精力。

Input

 

包含多组测试数据。

第一行为n, m, w。

接下来n个字符串,每个字符串长度为m,每个单词均为小写字母'a'-'z'组成。

 

1≤n≤1000

1≤m, w≤10

Output

输出一个值表示答案。

Sample Input

3 4 2abchabcdefgh

Sample Output

10

Hint

最优方案是:先凭空记下abcd和efgh消耗精力8,在通过abcd联想记忆去背诵abch,汉明距离为1,消耗为1 * w = 2,总消耗为10。

 

明明昨天刚学了生成树,结果今天做就没想到建图,真的蒟蒻。

因为要覆盖全部单词,那么可以想到生成树,那什么可以作为两个结点单词的链接呢,肯定是花费了,而且需要最小,那就是最小生成树了。

嗯这个先遍历一遍 ,把两两单词之间的花费求出来,以此为路径长度,这样求个最小生成树,最后加上一个结点的值即m就好。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 char word[1002][11]; 7 8 struct Node 9 {10 int x,y,w;11 }node[500005];12 int p[1002];13 int finds(int x)14 {15 return p[x] == x?x:p[x] = finds(p[x]);16 }17 bool cmp(Node a,Node b)18 {19 return a.w
< m?num*w:m;47 }48 }49 sort(node,node+tot,cmp);50 int ans = 0;51 for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/iwannabe/p/9119599.html

你可能感兴趣的文章
微软职位内部推荐-Software Engineer II
查看>>
区分Integer.getInteger和Integer.valueOf使用方法
查看>>
MySQL oracle 分页
查看>>
iOS基础-UIKit框架-触摸事件-响应者链条
查看>>
SQL优化
查看>>
利用Highcharts插件制作动态图表
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
4.9 Parser Generators
查看>>
[10月18日的脚本] 从Access中导入多个表到Excel
查看>>
centos下安装nginx
查看>>
redis集群如何清理前缀相同的key
查看>>
linux的学习系列 9--网络通信
查看>>
redis7--hash set的操作
查看>>
20.字典
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
oracle用户锁定
查看>>
(转)盒子概念和DiV布局
查看>>
Android快速实现二维码扫描--Zxing
查看>>
获取元素
查看>>