困難的串 回溯法

2022-05-02 11:27:07 字數 924 閱讀 1777

題目

如果乙個字串包含兩個相鄰的重複字串,則稱它是「容易的串」,其他串稱為「困難的串」。輸入正整數n和l,輸出由前l個字元組成的、字典序第n的困難的串。例如,當l = 3時,前7個困難的串分別是a、ab、aba、abac、abaca、abacab、abacaba。輸入保證答案不超過80個字元。

解題思路

從左到右依次考慮每個位置上的字元。因此,關鍵在於如何判斷當前字串是否已經存在連續的重複字串。類似於八皇后,我們只需判斷當前皇后和前面的皇后是否衝突,而不必判斷以前的皇后之間是否衝突(因為以前的已經判斷過了)。同樣的道理,我們只需判斷當前串的字尾,而非所有的字串。

**實現

1 #include2 #include3 #include4

using

namespace

std;56

const

int maxn = 80 + 10;7

intn, l;

8int

cnt;

9int

s[maxn];

1011

bool dfs(int

cur)

1221 printf("

\n%d\n

",cur);

22return1;

23}24for (int i = 0; i < l; i++)

2538}39

if(equal)

4044}45

if (ok) if (dfs(cur + 1)) return1;

46}47return0;

48}4950

intmain()

5157

return0;

58 }

回溯法 回溯法介紹 回溯與遞迴的區別

回溯法 有一類問題,我們不知道它明確的計算法則。而是先進行試探,試探到最終狀況,發現不滿足問題的要求,則回溯到上乙個狀態繼續試探。這種不斷試探和回溯的思想,稱為回溯法 backtrcking 此類問題包括 求最優解 一組解 全部解。例如八皇后問題 回溯的演算法思想 一直往下走,然後再一步步往回走 面...

回溯法,回溯法解裝載問題

利用回溯法解問題時一般按以下三步驟 1 定義問題的解空間 2 確定易於搜尋的解空間結構 3 以深度優先策略搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋 二 回溯法應用 裝載問題 一批貨櫃共n個要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi且w1 w2 wn c1 c2 試確定乙個...

困難的串問題

題目描述 如果乙個字串中存在相鄰的重複子串,則稱為容易的串,反之稱為困難的串。輸入正整數n和l,輸出由前l個大寫字母組成的,字典序第n小的困難的串。l不大於5,n不大於20。輸入在一行輸入n和l的值,遇到檔案末尾結束。輸出在一行輸出字典序第n小的困難的串。樣例輸入 7 3樣例輸出 abacaba i...