《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs
生活随笔
收集整理的這篇文章主要介紹了
《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目解答
- 題目鏈接
題目解答
分析:
優化:用二進制狀態壓縮,也就是用二進制上的位來記錄數有沒有被用過。
ac代碼
#include<bits/stdc++.h> using namespace std; int n; //用二進制狀態壓縮,也就是用二進制上的位來記錄數有沒有被用過。 // u是當前枚舉到的數,state是二進制數記錄哪些數被選 void dfs(int u ,int state){if( u == n){for(int i = 0; i< n; i++)//判斷第i位是不是1,如果是1就代表被選,輸出if(state >> i & 1) //第幾位就代表輸出幾,只不過不是從0開始,而是從1開始cout << i + 1 << " ";cout << endl;return;}// 不用這個數,第u位不動dfs(u + 1, state); // 用這個數,把第u位變成1dfs(u + 1, state | 1 << u); // 運算優先級: 左移高于位運算|}int main(){cin >> n;/*回顧一下dfs參數的含義:- u是當前枚舉到的數,-state是二進制數記錄哪些數被選則 dfs(0, 0)表示:當前枚舉到0,沒有數被選*/ dfs(0, 0);}題目鏈接
https://www.acwing.com/problem/content/94/
總結
以上是生活随笔為你收集整理的《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《算法竞赛进阶指南》打卡-基本算法-Ac
- 下一篇: 《算法竞赛进阶指南》打卡-基本算法-Ac