洛谷1036 選數(DFS

2021-08-20 09:55:20 字數 1346 閱讀 3698

已知 nn

n 個整數 x1,x2,…,xnx_1,x_2,…,x_nx1

​,x2

​,…,

xn​ ,以及 11

1 個整數 kk

k ( k

k<

n )。從 nn

n 個整數中任選 kk

k 個整數相加,可分別得到一系列的和。例如當 n=4,k=3n=4,k=3n=

4,k=

3 , 44

4 個整數分別為 3,7,12,193,7,12,193,

7,12

,19 時,可得全部的組合與它們的和為:

3+7+12=223+7+12=223+

7+12

=22

3+7+19=293+7+19=293+

7+19

=29

7+12+19=387+12+19=387+

12+1

9=38

3+12+19=343+12+19=343+

12+1

9=34

。 現在,要求你計算出和為素數共有多少種。

例如上例,只有一種的和為素數: 3+7+19=293+7+19=293+

7+19

=29 。

輸入格式:

鍵盤輸入,格式為:

n,kn,kn,

k ( 1≤n≤20,k1≤

n≤20

,kx1,x2,…,xn(1≤xi≤5000000)x_1,x_2,…,x_n (1 \le x_i \le 5000000)x1

​,x2

​,…,

xn​(

1≤xi

​≤50

0000

0)輸出格式:

螢幕輸出,格式為: 11

1 個整數(滿足條件的種數)。

輸入樣例#1:複製

4 3 3 7 12 19 

輸出樣例#1:複製

1 

思路很簡單:dfs列舉出各種情況,再加上個判斷素數就好了。

下面貼上**

#include #include #include #include #include using namespace std;

typedef long long ll;

ll n,k,a[25],num;

int ch(ll x)

return 1;

}void dfs(ll a,ll b,ll c)

洛谷P1036 選數(DFS)

已知 nnn 個整數 x1,x2,xnx 1,x 2,x nx1 x2 xn 以及111個整數kkk k3 7 12 223 7 12 223 7 12 22 3 7 19 293 7 19 293 7 19 29 7 12 19 387 12 19 387 12 19 38 3 12 19 343...

洛谷1036選數總結

思路總結 本題還是典型的dfs題目,關鍵在於狀態空間的選取,我想了想,用void dfs int now,int sum 其中now表示從n個數中選取k個數,相當於放在k個位置,now即代表第幾個位置,sum表示求和,但是在for迴圈選數的時候,思路卡了殼,原因就是每次都是從1 n選取,會有數的重複...

洛谷P1036 選數

已知 n 個整數 x1,x2,xn,以及乙個整數 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 19 34。...