description
已知 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+19=34。
現在,要求你計算出和為素數的組合共有多少種。
例如上例,只有一種組合和為素數:3+7+19=29。
特別說明:輸入資料中如果有重複,由於下標不同,被認為是不同,比如,3,1,2,3 中下標為1的3和下標為4的3不同。因此,此處的3 + 2 = 5 和 2 + 3 = 5 均應該被統計。
input
第一行兩個整數:n , k (1<=n<=20,k<n) 第二行n個整數:x1,x2,…,xn (1<=xi<=100000)
output
乙個整數(滿足條件的方案數)。
sample input 1
4 33 7 12 19
sample output 1
1——摘自ycoj
在做這道題時,我們可以看一看另一道題:
組合的輸出
description
排列與組合是常用的數學方法,其中組合就是從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
input
一行兩個自然數n、r(1sample input 1
5 3sample output 1
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
——摘自ycoj
依舊是一道dfs。
組合的輸出並不難,只要處理好了細節問題,就變得簡單。
但這到題不是重點,它只是組合+判斷素數要用到的一部分,所以直接上**:
#includeusing namespace std;
int a[1000];
int n,r;
void dfs(int sum)
然後,是不是有很大的相似之處?
組合+判斷素數只多了乙個將數加起來,並判斷它的和是否為素數。
所以,我們定義乙個新的函式,用於判斷素數。
bool in(int t)
} return 1;
}
在把它加進組合的輸出,並對**進行改進,就完成了。
#includeusing namespace std;
int a[1000],b[1000];
int n,r;
int ans=0;
bool in(int t)
} return 1;
}void dfs(int sum)
for(int i=a[sum-1]+1;i<=n;i++)
}int main()
dfs(1);
cout
}
dfs組合 判斷素數
遞迴入門 組合 判斷素數 時間限制 1 sec 記憶體限制 128 mb 提交 205 解決 77 提交 狀態 討論版 命題人 外部匯入 題目描述 已知 n 個整數b1,b2,bn 以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整...
DFS 組合 判斷素數
題目描述 已知 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 19...
c 組合and判斷素數
已知 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。...