深度优先搜索!!!!!
n 个数中取不超过 k 个数并将他们相加,请问有多少种不同的取法使得取出的数的和是质数
Input
多组数据,第一行一个整数 T 表示数据组数(T<=5)
对于每一组数据:
第一行两个整数 n,k,意义如题所示(1<=n<=20,k<=n)
接下来一行 n 个正整数,保证 Ai<=5000000
Output
对于每一组数据,输出一行一个整数作为答案
Sample Input
1
4 3
3 7 12 19
sample Output
6
Hint
样例解释:{3},{7},{19},{7,12},{12,19},{3,7,19}
这个题比赛时没有 ac 比赛时一直在考虑该怎样优化暴力,最后快要结束时听大佬李用dfs过了,于是结束后补一波题,相当于重新学了一波dfs
1.首先素数打表,本题 5e6 的数据,我稳妥一点直接开到 1e7;
2.第二就是最核心的部分,dfs递归运用,题中说是不超过 k 个数,所以在dfs中要罗列 1 - k,
void dfs(ll x,ll sum,ll k)
{
if(isp[sum]==0) //这里sum 为每次传进来的 a[i] 和 从a[i] 开始往后的1 - k 个数列中的数(a[i],a[i]+a[i+1],.,.,.,.,.,)
ans++;
if(k>