傳送門
由於m只有20,所以我們知道狀態數一共只有2^20,我們如果能算出每個狀態和給定n個字串相似度的最大值,這道題就解決了。首先我們知道所有n個串最初的dp值為m,通過bfs,把每個串丟進佇列一次,每個串改變每一位得到新的字串,相同位少了乙個 , 即相似度減一,更新那些沒出現過的串的dp值再丟進佇列,就可以保證當前步數為最大相似度。而且保證每個串只進一次佇列
#include#include#include#includeusing namespace std;
int deep[1 << 21];
int inf = 0x3f3f3f3f;
int main()
} int ans = inf;
while(!q.empty()) //總共就2^20種狀態, 用ans儲存最小值, 若某乙個值到其中乙個狀態的步數最小, 類
//似bfs, 其他值到這一狀態的步數一定不小於ans, 為最小值
}} printf("%d", ans);
}
牛客練習賽41 最小相似度 解題報告
思路不錯的題目 考慮到總體的狀態數只有 2 m 中,如果我們把某個串改變1位,這個改變後的串和這個串的答案就是 m 1 由此可見,每個串到另乙個串都有乙個距離,我們把這個距離設為改變的位數,所有串到某個串都有乙個最小位數 x 這個最小位數的最大值 y 的答案 m y 就是我們的答案。我們發現這就是乙...
牛客練習賽 41 D 最小相似度 BFS
題意 定義兩個位數相等的二進位制串的相似度sim a,b 二進位制串中a b中0的個數 sim left a,b right texta oplus b text sim a,b 二進位制串中a b中0的個數 給定n nn個長度為m mm的二進位制串。現在的問題是找出乙個額外的長度為m mm的二進位...
牛客練習賽41 D 最小相似度(BFS)
思路 m最大只有20,如果把每個二進位制串看成乙個狀態,最多只有2 20 1048576個狀態,可以暴力搜尋。如果我們把某個串改變1位,這個改變後的串和這個串的答案就是m 1,比如01001,隨便改變1位變成01000,01001 01000 00001 答案就是m 1。我們要找的是m x的最小值,...