排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素(不分順序且r≤n),我們可以簡單地將n個元素理解為自然數1,2,…,n,從中任取r個數。
現要求你用遞迴的方法輸出所有組合。
例如n=5,r=3,所有組合為:
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
一行兩個自然數n、r(1所有的組合,每乙個組合佔一行且其中的元素按由小到大的順序排列,每個元素佔三個字元的位置,所有的組合也按字典順序。
5 3
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
分析資料範圍,1<=r
\[c^r_n=\frac
\]可知,如果n取最大值20,那麼方案數將是:
\[\frac
\]畫出影象後,發現影象過r=10對稱,r=10時取到最大值184756。
每個方案會有最多19個元素,共有19*184756=3510364個元素。
dfs的複雜度為大約o(3.5*106),可以接受。
我一開始的**出了許多問題,經過我的辛苦努力,最後還是ac了,看來想演算法遠不如實現演算法困難:
#include#includeusing namespace std;
int n,r,ans[30];
void dfs(int at,int x)
cout<>n>>r;
return 0;
}
(本來除錯時把第10行printf裡的ans[j]打成ans[i],並且把第22行的dfs(1,0)打成dfs(0,0),樣例過不了嚇得我認為自己連例題都要抄借鑑題解)
但是我終於自己打出來此題,祝賀一下!!
1317 組合的輸出
排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素 不分順序且r n 我們可以簡單地將n個元素理解為自然數1,2,n,從中任取r個數。現要求你用遞迴的方法輸出所有組合。例如n 5,r 3,所有組合為 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2...
T1317 例5 2 組合的輸出
排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素 不分順序且r n 我們可以簡單地將n個元素理解為自然數1,2,n,從中任取r個數。現要求你用遞迴的方法輸出所有組合。例如n 5,r 3,所有組合為 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2...
DFS 3 組合 判斷素數
problem 已知 n 個整數b1,b2,bn 以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 29 7 12 19 38 3 12...