vijos 1128 N个数选K个数 (DFS )

从 n 个整数中任选 k 个整数相加,可分别得到一系列的和 要求你计算出和为素数共有多少种

IN
4 3
3 7 12 19

OUT
1

 # include <iostream>
# include <cstdio>
# include <cmath>
using namespace std ; int a[] ;
int ans = ;
int n , k ; bool isp (int val )
{
int i ;
if (val == )
return ;
for (i = ; i <= sqrt(val) ; i++)
{
if (val % i == )
return ;
}
return ; } void dfs(int cur , int cnt , int num)
{
if (cnt == k)
{
if (isp(num))
ans++ ;
return ;
}
int i ;
for (i = cur ; i <= n ; i++)
dfs(i+ , cnt+ , num+a[i]) ;
} int main ()
{ while (scanf("%d %d" ,&n , &k) != EOF)
{
ans = ;
int i ;
for (i = ; i <= n ; i++)
scanf("%d" , &a[i]) ;
dfs( , , ) ;
printf("%d\n" , ans) ;
} return ;
}
上一篇:【uoj#164】[清华集训2015]V 线段树维护历史最值


下一篇:《Java》第四周学习总结