FZU 2254 英語考試

2021-08-04 09:58:51 字數 1408 閱讀 8757

在過三個禮拜,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 2

abch

abcd

efgh

sample output

10

hint

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

這個題就是個最小生成樹的題,求出每兩個點之間的聯絡值,然後就套prim最小生成樹的板子就行了。

#include #include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

int map[1100][1100];

int dis[1100];

char str[1100][15];

int b[1100];

int main()

for(i = 0;i < n;i++)

}map[i][j] = map[j][i] = min(m,s * w);}}

memset(b,0,sizeof(b));

for(i = 0;i < n;i++)

dis[i] = inf;

b[0] = 1;

sum = m;

for(i = 0;i < n;i++)

s = 1;

while(s < n)

}sum += dis[j];

b[j] = 1;

s++;

for(k = 0;k < n;k++)

}cout<

FZU2254 英語考試

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

FZU2254 英語考試

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

FZU2254 英語考試 最小生成樹

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