NIOP选数(dfs)

来源:互联网 发布:中国单晶叶片 知乎 编辑:程序博客网 时间:2024/06/05 13:31
Description已知 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)。 Input键盘输入,格式为:n , k (1<=n<=20,k<n)x1,x2,…,xn (1<=xi<=5000000) Output 屏幕输出,格式为:一个整数(满足条件的种数)。 Sample Input4 33 7 12 19Sample Output1#include <stdio.h>#include <math.h>int a[25];int n,k,count;int panduan(int n){    int i;    if (n==1)    return 0;    int k=(int)sqrt(n);    for (i=2;i<=k;i++)        if (n%i==0)        return 0;        return 1;}int DFS(int a[25],int num,int sum,int l){    int i;    if (num==k)    {       if (panduan(sum))           count++;    }    else    {       for (i=l;i<n;i++)        DFS(a,num+1,sum+a[i],i+1);    }} int main() {     int i,j;     scanf("%d%d",&n,&k);     for (i=0;i<n;i++)      scanf("%d",&a[i]);      DFS(a,0,0,0);      printf("%d\n",count);      return 0; }

0 0
原创粉丝点击