const int N = 1e3 + 10;
int n,k;
int a[N];
LL ans;
bool check(LL n)
{
if (n < 2) return false;
for (int i = 2;i <= n / i;i ++)
if (n % i == 0) return false;
return true;
}
void dfs(LL u,LL sum,LL stx)//当前选了几个数,和,从几开始
{
if (u > k)
{
if (check(sum)) ans ++;
return;
}
for (int i = stx;i <= n;i ++)
{
dfs(u + 1,sum + a[i],i + 1);
}
}
void solve()
{
cin >> n >> k;
for (int i = 1;i <= n;i ++) cin >> a[i];
dfs(1,0,1);
cout << ans << endl;
}
洛谷 P1036 [NOIP 2002 普及组] 选数 dfs
于 2025-04-06 18:07:51 首次发布