遞迴實現指數型列舉

2021-10-21 02:19:33 字數 1216 閱讀 2342

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

輸入格式

輸入乙個整數 n。

輸出格式

每行輸出一種方案。

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

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

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

資料範圍

1≤n≤15

輸入樣例:

3輸出樣例:32

2 31

1 31 2

1 2 3

解題思路:

題目要求要公升序排列,那我們先想想假如不用公升序排序,這題要怎麼做呢?

**如下:

#include

using

namespace std;

const

int n =30;

int a[n]

;bool st[n]

;int n;

//當前列舉到第pos個坑,一共有tar個坑

void

dfs(

int pos,

int tar)

cout

;//因為我們要讓它回到原來的位置,所以要加return進行回溯

}for

(int i =

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

}int

main()

return0;

}

當需要公升序排列時,

**如下:

#include

using

namespace std;

const

int n =30;

int a[n]

;bool st[n]

;int n;

// 當前列舉到第pos個坑, 上乙個坑填的是start-1,

//這次只能從start開始找數填, 一共要填tar個坑

void

dfs(

int pos,

int tar,

int start)

cout

for(

int i = start+

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

}int

main()

return0;

}

遞迴實現指數型列舉

從 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 ...