AcWing 92 遞迴實現指數型列舉

2021-10-04 07:44:20 字數 1171 閱讀 1069

從 1~n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。

輸入乙個整數n。

每行輸出一種方案。

同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。

對於沒有選任何數的方案,輸出空行。

輸入樣例:

3輸出樣例:32

2 31

1 31 2

1 2 3

這道題要求同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。且行與行之間的排序沒有要求。看了zhb大佬的題解後發現有了一些引例。

如果題目不要求輸出方案必須公升序,就是可以隨便輸出,無論是每一行,或者行與行之間。

#include

using

namespace std;

int n;

int a[20]

;bool vis[20]

;void

dfs(

int x,

int step)

cout

for(

int i=

1;i<=n;i++)}

}int

main()

輸出:12

31 2

1 32 1

2 33 1

3 21 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

如果題目要求輸出方案必須公升序。

在上面的基礎山加乙個判斷條件就好。

#include

using

namespace std;

int n;

int a[20]

;bool vis[20]

;void

dfs(

int x,

int step)

cout

for(

int i=

1;i<=n;i++)}

}int

main()

輸出:12

31 2

1 32 3

1 2 3

遞迴 92 遞迴實現指數型列舉

從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入格式 輸入乙個整數n。輸出格式 每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。本題有自定義校驗器 spj 各行 不同方案 之間的順序任意。資料範圍 1 n 151...

92 遞迴實現指數型列舉

從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入格式 輸入乙個整數n。輸出格式 每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。本題有自定義校驗器 spj 各行 不同方案 之間的順序任意。資料範圍 1 n 15 ...

92 遞迴實現指數型別列舉

這等價於每個整數可以選可以不選,所有可能的方案總數有2的n次方種,通過前兩節的學習我們已經知道可以進行一次迴圈,利用位運算來列舉所有的選擇方案。這一次我們使用遞迴來求解,在每一次遞迴中分別嘗試某個數 選 還是 不選 兩條分支,將尚未確定的整數數量減少1,從而轉化為乙個規模更小的同類問題。includ...