ybt1317 組合方案(dfs經典例題)超硬核

2022-05-16 07:45:56 字數 1039 閱讀 7675

排列與組合是常用的數學方法,其中組合就是從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...