AcWing92 dfs 遞迴 狀壓

2021-10-02 08:08:18 字數 1486 閱讀 3112

題目描述

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

輸入格式

輸入乙個整數n。

輸出格式

每行輸出一種方案。

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

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

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

資料範圍

1≤n≤15

輸入樣例:

3輸出樣例:32

2 31

1 31 2

1 2 3

做法1:利用深搜,填坑方式將乙個個數填進

#include 

using namespace std;

int n;

int a[20]

;bool vis[20]

;void

dfs(int pos, int start, int tar)

for(int i = start; i <= n; i++)}

}int main()

return0;

}

做法2:在做法一的基礎上,不開陣列a,利用二進位制使用乙個變數的空間進行儲存情況。

#include 

using namespace std;

int n;

bool vis[20]

;void

dfs(

int pos,

int start,

int tar,

int state)

cout << endl;

return;}

for(

int i = start; i <= n; i++)}

}int

main()

return0;

}

做法三(學習自lovebecky):利用狀態壓縮:如果輸入數字為3, 那麼就有2的3次方個 結果,通過0,1來判斷該位置是否需要輸出。

例中n=3,即

000 -> \n

001 -> 1

010 -> 2

100 -> 3

011 -> 1 2

101 -> 1 3

110 -> 2 3

111 -> 1 2 3

#include 

using namespace std;

int n;

void

dfs(

int u,

int state)

}cout << endl;

return;}

dfs(u +

1, state)

;dfs

(u +

1, state |(1

<< u));

}int

main()

165 小貓爬山 (DFS 狀壓DP)

翰翰和達達飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 翰翰和達達只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1 c2 cnc1 c2 cn。當然,每輛纜車上的小貓的重量之和不能超過w。每租用一...

AcWing1064 騎士(狀壓DP)題解

題目傳送門 題目描述 在 n n 的棋盤上放 k 個國王,國王可攻擊相鄰的 8 個格仔,求使它們無法互相攻擊的方案總數。輸入格式 共一行,包含兩個整數 n 和 k。輸出格式 共一行,表示方案總數,若不能夠放置則輸出00。資料範圍1 n 10 0 k n 2 輸入樣例 3 2 輸出樣例 題解 狀態壓縮...

AcWing 92 遞迴實現指數型列舉

從 1 n 這 n 個整數中隨機選取任意多個,輸出所有可能的選擇方案。輸入乙個整數n。每行輸出一種方案。同一行內的數必須公升序排列,相鄰兩個數用恰好1個空格隔開。對於沒有選任何數的方案,輸出空行。輸入樣例 3輸出樣例 32 2 31 1 31 2 1 2 3 這道題要求同一行內的數必須公升序排列,相...