題目描述
已知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
現在,要求你計算出和為素數共有多少種。
例如上例,只有一種的和為素數:3+7+19=29
輸入每個測試檔案只包含一組測試資料,每組輸入的第一行輸入兩個整數n和k(1<=n<=20,k<n)。
第二行輸入n個整數x1,x2,…,xn(1<=xi<=5000000)。
輸出對於每組輸入資料,輸出乙個整數,表示滿足條件的種數。
分析:求解k個數的和就用到dfs來求,然後每次選了k個數後,判斷一下是否是素數,是的話,累加即可。
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define clear(x) memset(x,0,sizeof(x))
#define fup(i,a,b) for(int i=a;ib;i--)
#define rfdn(i,a,b) for(int i=a;i>=b;i--)
typedef long long ll;
using namespace std;
const int maxn = 1e2+7;
const int maxn1 = 5e6+7;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1.0);
const double eps = 1e-8;
int a[maxn];
bool vis[maxn1];
int n,k,ans=0;
int read()
while(ch>='0'&&ch<='9')
return f*ret;}
bool check(int x)
return true;}
void dfs(int index,int sum,int step)//當前從哪個數字開始選,當前已選數字的和,當前選了幾個數
fup(i,index,n)
}} int main()
NOIP 2002提高組 選數 dfs 暴力
2002年noip全國聯賽普及組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題目描述 description 已知 n 個整數 x1,x2,xn,以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 ...
NOIP2002 普及組 選數
題目描述 已知 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 1...
選數 NOIP2002 學習總結
問題描述 已知 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 1...