P1036 选数

mac2024-06-03  32

#include<stdio.h> #include<cmath> int a[25]; int sum = 0; int count = 0; int n; int k; void fun(int i, int p); int isp(int n) { if (n <= 1) return 0; int x = sqrt(n); for (int i = 2; i <= x; i++) { if (n % i == 0) return 0; } return 1; } int main() { scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int i = 0; fun(i, k); printf("%d", count); return 0; } void fun(int i, int p) { if (p == 0) //这时候,不需要选择了 { if (isp(sum)) //如果sum和是素数 count++; //则加1 return; //如果没有这个,会导致stack overflow } for (i; i <= n - p; i++) { sum += a[i]; //选择一个数 fun(i + 1, p - 1); //选择其他的数 sum -= a[i]; //把选择的数删掉,为选择第二个数做准备 } }

总结: 我TM都不知道我怎么就ac了!! 这个应该算作是深度优先搜索

先做好一个的操作,然后,就是递归调用函数,进行下一个数的操作

最新回复(0)