菜雞提公升日記 遞迴列舉

2021-10-24 09:05:41 字數 2820 閱讀 6646

題目來自acwing

1.遞迴實現指數型列舉

1.保證答案中公升序,需要保證備選陣列中數字為公升序,題目為自然數1-n不用考慮排序,但是需要乙個start來確定每次放入答案陣列中的數字從多少開始。

2.輸出每一種方案,需要設立0-n個邊界值(n為空集)

#include

using

namespace std;

int ans[20]

;int n;

void

dfs(

int pos,

int start,

int cur)

//start 確保公升序,

printf

("\n");

}for

(int i=start; i<=n; i++

)//從1開始進行列舉

}int

main()

變體:

加入陣列

2.答案中避免降序,用start限制每一次迴圈的開始

3.邊界從0到n依次代表從空集,到全集

4.避免相同數字進入答案,重複的數字,要麼是第一次要選的,要麼是與前一數字不重複的,重複的數字會在arry[i]!=arry[i-1]處被篩出

#include

using

namespace std;

int ans[20]

;int arry[20]

;int n;

void

dfs(

int pos,

int start,

int cur)

//start 確保公升序,

printf

("\n");

}for

(int i=start; i

)//從1開始進行列舉}}

intmain()

2.遞迴實現組合型列舉

變體

}3.遞迴實現排列型列舉

變體

2.採用i==0||arry[i]!=arry[i-1]去重

#include

using

namespace std;

int ans[10]

;int arry[10]

;int cnt[10]

;int n;

void

dfs(

int pos)

printf

("\n");

}else}}

}int

main()

sort

(arry,arry+n)

;dfs(0);}

對於列舉

1.需要公升序,採用start

2.若引用陣列,需要去重 加 i==(初始)||arry[i]!=arry[i-1];

3.每一方案,主函式加for迴圈,從0-n依次為答案邊界

4.無序排列需要引用計數陣列(陣列中有重複情況)/訪問陣列(陣列中數字單一)

5.指數型列舉 邊界不固定

6.組合型列舉 邊界固定

7.排列型列舉 可以往前遍歷

菜雞成長日記 番外篇

菜雞成長日記 番外篇 語言的水平決定木板的優秀程度,而知識和經驗的豐富程度決定了模組的優秀程度,模組的優秀決定了最終模型的優秀程度。我總結的模組有兩部分,一是資料處理模組,二是模型模組,我們由於水平的不夠,所以只針對性的對資料做了處理,而且也不是特別好,比如去重,填補缺失值,刪除我們覺得關係不是很大...

PTA菜雞刷題日記(6 10)

乙個正整數 n 的因子中可能存在若干連續的數字。例如 630 可以分解為 3 5 6 7,其中 5 6 7 就是 3 個連續的數字。給定任一正整數 n,要求編寫程式求出最長連續因子的個數,並輸出最小的連續因子序列。輸入格式 輸入在一行中給出乙個正整數 n 1輸出格式 首先在第 1 行輸出最長連續因子...

菜雞日記 C語言學習之函式 2

自己呼叫自己,感覺和迴圈差不多。但是有些問題遞迴更好理解,迴圈不太好理解。但是遞迴需要的空間更多。因為每次呼叫自己都要開闢一塊新的空間。什麼情況下可以用遞迴?解決問題的思路,轉化為問題本身類似的問題時,可以採用遞迴 是不是所有的遞迴問題,c語言都支援呢?不是的 c語言支援的遞迴,要滿足以下條件 1 ...