社区讨论
dfs mle
P1036[NOIP 2002 普及组] 选数参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mhj9hnmr
- 此快照首次捕获于
- 2025/11/03 22:55 4 个月前
- 此快照最后确认于
- 2025/11/03 22:55 4 个月前
CPP
#include<iostream>
#include<algorithm>
using namespace std;
#define int long long
const int maxx = 5e8;
int n, m, k[30],cnt,p[100001];
bool prime[maxx];
void isprime(int x)
{
for (int i = 2; i <= x; i++)
{
if (!prime[i]) p[++cnt] = i;
for (int j = 1; j <= cnt && p[j] * i <= x; j++)
{
prime[i * p[j]] = 1;
if(i % p[j] == 0)
break;
}
}
}
int ans[30],q;
void dfs(int x)
{
if (x == m + 1)
{
int sum = 0;
for (int i = 1; i <= m; i++)
{
sum += ans[i];
}
if (!prime[sum])
{
q++;
}
return;
}
for (int i = 1; i <= n; i++)
{
if (ans[x - 1] >= k[i] && x!=1)
continue;
ans[x] = k[i];
dfs(x + 1);
ans[x] = 0;
}
}
signed main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> k[i];
isprime(maxx);
sort(k + 1, k + n + 1);
dfs(1);
cout << q;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...