FZU 2254 英語考試 (最小生成樹)

2021-08-08 22:36:07 字數 1168 閱讀 1515

problem 2254 英語考試

在過三個禮拜,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個單詞,請問它最少需要消耗多少精力。

包含多組測試資料。

第一行為n, m, w。

接下來n個字串,每個字串長度為m,每個單詞均為小寫字母'a'-'z'組成。

1≤n≤1000

1≤m, w≤10

輸出乙個值表示答案。

3 4 2

abch

abcd

efgh 10

最優方案是:先憑空記下abcd和efgh消耗精力8,在通過abcd聯想記憶去背誦abch,漢明距離為1,消耗為1 * w = 2,總消耗為10。

思路: 也算是最小生成樹的模板題.。主要的是兩個節點之間的邊,需要判斷一下,找出較小的邊。(第一種邊就是裸背,邊的長度也就是字串的長度d,第二種邊是根據已會的單詞  找到 其中不相同的字母的個數 x   x*c)

**:#include#include#include#include#define n 1005

using namespace std;

struct node

edge[n*n];

int cnt;

int a[n][n];

int f[n];

char s[n][15];

int n,d,w;

int getf(int x)

void merge(int x,int y)

int jisuan(int i,int j)

{ int num=0;

for(int k=0;k

FZU2254 英語考試 最小生成樹

problem 2254 英語考試 在過三個禮拜,yellowstar有一場專業英語考試,因此它必須著手開始複習。這天,yellowstar準備了n個需要背的單詞,每個單詞的長度均為m。yellowsatr準備採用聯想記憶法來背誦這n個單詞 1 如果yellowstar憑空背下乙個新詞t,需要消耗單...

FZU 2254 英語考試 最小生成樹)

problem 2254 英語考試 在過三個禮拜,yellowstar有一場專業英語考試,因此它必須著手開始複習。這天,yellowstar準備了n個需要背的單詞,每個單詞的長度均為m。yellowsatr準備採用聯想記憶法來背誦這n個單詞 1 如果yellowstar憑空背下乙個新詞t,需要消耗單...

FZU 2254 英語考試

在過三個禮拜,yellowstar有一場專業英語考試,因此它必須著手開始複習。這天,yellowstar準備了n個需要背的單詞,每個單詞的長度均為m。yellowsatr準備採用聯想記憶法來背誦這n個單詞 1 如果yellowstar憑空背下乙個新詞t,需要消耗單詞長度m的精力 2 如果yellow...