暴力入門 排列與組合列舉

2021-08-21 05:30:57 字數 988 閱讀 3974

排列和組合列舉都是暴力基礎啦,雖然很簡單但是總結一下比較好

組合

先從簡單的說起吧,比如說從n個數里選k個

先放**:

void combination(int cur,int cnt)//cur為當前數,cnt為已選擇數的個數 

} conbination(1,0);

(這裡的n, k, cur, cnt均指序號)

這種思路並不難理解,要保證每一位數前面都沒有出現,可以直接從小到大,每一位都列舉上一位後面的數,通過遞迴就能把所有的組合都列舉出來啦。

排列

最準確的排列演算法是通過一步步進化來的

again,比方說從n個數里選出k個進行排列

最傻白甜的乙個寫法:

bool check(int i,int n)

可以但不行

所以我們會想到開乙個計數器ci,記錄每個數字一共出現了幾次。

然後這樣:

bool check(int i,int n,int c1)

void permutation(int cnt)

}}

挺麻煩的,但是能做對

但是,如果去考試的話,c++裡其實有庫可以直接用...

乙個叫next_permutation的神奇函式

這時我們假設將要排列列舉的陣列為p

#include#include//演算法標頭檔案

using namespace std;

int main()

while(next_permutation(p+1,p+n+1));

return 0;

}

(還有這種操作???.jpg)

遞迴列舉排列組合

從1 n這n n 20 個整數中隨機取出任意多個,輸出所有的可能選擇方案。2的n次方種 思路 使用遞迴實現,每次遞迴分別嘗試對每乙個數進行選或者不選的操作,尚未確定的整數數量減少1.vector int chosen class solution calc x 1,n,result chosen.p...

暴力列舉 洛谷入門

問題一 p2241 統計方形 資料加強版 題目描述 有乙個 n m 方格的棋盤,求其方格包含多少正方形 長方形 不包含正方形 輸入格式 一行,兩個正整數 n 5000,m 5000 輸出格式 一行,兩個正整數,分別表示方格包含多少正方形 長方形 不包含正方形 輸入輸出樣例 輸入 2 3輸出 8 10...

暴力求解法 之 列舉排列

1 生成1 n的排列 include includeconst int n 1e3 10 int a n void print permutation int n,int a,int cur int i,j if cur n 遞迴邊界 for i 0 i 2 生成可重集的排列 上面求排列的程式只適用...