在過三個禮拜,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。
1 #include 2using
namespace
std;
3#define max 100545
/*6思路:最小生成樹的題目 每個字串看成乙個點 各點之間的權值就看 漢明距離*w與字串長度m之間小的那個值 使用prim演算法7*/
89char strs[max][15
];10
//表示邊權值
11int
edges[max][max];
12//
表示該點是否加入集合
13int
vis[max];
14//
表示該點到集合s的最小距離
15int
dist[max];
16int
n, m, w;
1718
int hamming(int i, int
j)19
26return
sum;27}
2829
intprim()
3040
//n個節點擊擇n-1條邊
41for (int i = 1; i < n; i++)
4251
}52 vis[c] = 1
;53 ans +=d;
54//
更新dist
55for (int j = 1; j < n; j++)
5661}62
}63return
ans;64}
6566
intmain()
6774
//計算邊
75for (int i = 0; i < n; i++)
7682
}83 printf("
%d\n
", prim() +m);84}
85 }
FZU 2254 英語考試
在過三個禮拜,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,需要消耗單...