題目來自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 ...