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

2021-08-14 15:15:08 字數 1132 閱讀 7731

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 2abchabcdefgh 10

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

會建樹就行

把每個單詞看做城市

距離便是min(m,hamming(i,j)*w)

然後用最小生成樹就能鏈結所有單詞

最後加上第乙個記憶單詞需要的精力m

stl會超時

#include #include #include #include using namespace std;

int n,m,w;

char s[1111][11];

int pre[1111];

struct xjy

};int findx(int x)

return r;

}void join(int x,int y)

}int judge(int s1,int s2)

{ int sum=0;

for(int i=0;iq;

for(int i=0;i

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...