原题链接:
dfs枚举组合型
dfs的三个参数含义:
cnt: 当前选了多少个数
sum: 这些数的和
st: 从哪个数开始
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int N = 30;
int n, k, a[N], ans;
bool is_prime(int x) {
if (x <= 1) return false;
for (int i = 2; i <= sqrt(x); i++) {
if (x % i == 0) return 0;
}
return 1;
}
void dfs(int cnt, int sum, int st) {
if (cnt == k) {
if (is_prime(sum)) ans++;
return;
}
for (int i = st; i <= n; i++) {
dfs(cnt + 1, sum + a[i], i + 1);
}
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
dfs(0, 0, 1);
cout << ans << endl;
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- how234.cn 版权所有 赣ICP备2023008801号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务