問題描述:如果乙個子婦產包含兩個相鄰的重複子串,則稱它是「容易的串」,其他的串稱為「困難的串」。例如,bb、abcdacabcab、abcdabcd都是容易的,而d、dc、abdab、cbabca都是困難的。輸入乙個正整數n和l,輸出由前l個字元組成的、字典序第n小的困難的串。
解這個問題我用的是dfs,深度搜尋,其實這個問題要列舉出各種排列並不是問題,有問題的是如何判斷乙個串裡面到底有沒有相鄰且重複的子串,這才是問題的關鍵所在。
解過八皇后問題的童鞋都知道 ,在新放入乙個皇后之後判斷當前局面有沒有衝突的時候,只需要判斷當前局面有沒有衝突,而不必去管以後的事,其實這個問題也一樣,我們只要每次放進乙個字元進去之後判它的每一種字尾你是否有相鄰的並且相同的就可以了。然後如果判斷出來沒有衝突的話,就遞迴下去,直到找到第n個串。下面把**貼出來看下:
1 #include2 #include3view codeint num,l,n,a[1000
]; 4
bool
flag;
5void dfs(int
deep)
14for(int i = 0;ii) 26}
27if
( f ) 33}
34return;35
}36intmain()
42return0;
43}4445
困難的串問題
題目描述 如果乙個字串中存在相鄰的重複子串,則稱為容易的串,反之稱為困難的串。輸入正整數n和l,輸出由前l個大寫字母組成的,字典序第n小的困難的串。l不大於5,n不大於20。輸入在一行輸入n和l的值,遇到檔案末尾結束。輸出在一行輸出字典序第n小的困難的串。樣例輸入 7 3樣例輸出 abacaba i...
困難的串(dfs)
困難的串 題意 如果乙個字串包含兩個相鄰的重複子串,則稱它是 容易的串 其他串稱為 困難的串 例如,bb abcdabcd都是容易的串,而d dc abdad cbabcba都是困難的串。輸入正整數n和l,輸出由前l個字元組成的 字典序第k個困難的串。例如,當l 3時,前7個困難的串 分別為a ab...
困難的串 回溯法
題目 如果乙個字串包含兩個相鄰的重複字串,則稱它是 容易的串 其他串稱為 困難的串 輸入正整數n和l,輸出由前l個字元組成的 字典序第n的困難的串。例如,當l 3時,前7個困難的串分別是a ab aba abac abaca abacab abacaba。輸入保證答案不超過80個字元。解題思路 從左...