NOIP 2002 選數 DFS 素數判定

2021-08-22 13:28:20 字數 1241 閱讀 9116

題目描述

已知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...