![题解:P1036 [NOIP 2002 普及组] 选数](https://sourcebucket.s3.bitiful.net/img/default_cover_7.webp)
题解:P1036 [NOIP 2002 普及组] 选数
思路
由于数据小,考虑暴力搜索每种可能并判断总和是否为素数。
详细一点(定义 $m$ 为选的数个数,$s$ 为当前的和,$x$ 为下一个选的数的位置,$dfs(m, s, x)$ 为搜索函数,$ans$ 为种类数即题目所求):
确定当前选择的数;
从 $x$ 遍历 $i$ 至整个数组 $a$,每次搜索 $dfs(m + 1, s + a_i, i + 1)$;
当 $m = k$ 了,判断 $s$ 是否为素数:
是:$ans + 1$;
不是:结束搜索,因为后面没有继续搜索的必要。
代码
1234567891011121314151617181920212223242526272829303132333435#include <bits/stdc++.h>#define endl '\n'using namespace std;long long n, k, ans, a[25];bool check(long long x) // 判断 x 是否为质数{ for (lon ...

