題目描述
從 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 這道題要求同一行內的數必須公升序排列,相...