題目
如果乙個字串包含兩個相鄰的重複字串,則稱它是「容易的串」,其他串稱為「困難的串」。輸入正整數n和l,輸出由前l個字元組成的、字典序第n的困難的串。例如,當l = 3時,前7個困難的串分別是a、ab、aba、abac、abaca、abacab、abacaba。輸入保證答案不超過80個字元。
解題思路
從左到右依次考慮每個位置上的字元。因此,關鍵在於如何判斷當前字串是否已經存在連續的重複字串。類似於八皇后,我們只需判斷當前皇后和前面的皇后是否衝突,而不必判斷以前的皇后之間是否衝突(因為以前的已經判斷過了)。同樣的道理,我們只需判斷當前串的字尾,而非所有的字串。
**實現
1 #include2 #include3 #include4using
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...