遞迴實現指數型列舉

2022-01-26 02:50:54 字數 1033 閱讀 7371

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

輸入格式

輸入乙個整數n。

輸出格式

每行輸出一種方案。

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

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

本題有自定義校驗器(spj),各行(不同方案)之間的順序任意。

資料範圍

1\(\leq\)n \(\leq\) 15

輸入樣例

輸出樣例
3

22 3

11 3

1 21 2 3

1~n這n個數字每個數字都有輸出與不輸出兩種選擇。所以所有的輸出方案共有\(2^n\)種。

我們可以考慮使用狀態壓縮的做法。

狀態壓縮的特性:可以列舉所有選與不選的情況。

可以用state的二進位制表示形式中每位上的0/1體現每個數字的不選/選

eg:當n=3時,共有8中輸出方案。

state=0 ——> 000 ——>乙個數字也不輸出

state=1 ——> 001 ——>輸出數字1

state=2 ——> 010 ——>輸出數字2

state=3 ——> 011 ——>輸出數字1 2

state=4 ——> 100 ——>輸出數字3

state=5 ——> 101 ——>輸出數字1 3

state=6 ——> 110 ——>輸出數字2 3

state=7 ——> 111 ——>輸出數字1 2 3

非遞迴c++ **

#includeusing namespace std;

int main()

非狀壓dp遞迴**
#includeusing namespace std;

int stu[20];

void dfs(int u,int n)

遞迴實現指數型列舉

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

遞迴實現指數型列舉

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

遞迴實現指數型列舉

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