题目说:要求你计算出和为素数共有多少种。
就是不能重复,我把重复的和标记去掉,只得到33分。
不知道是题目出错还是数据问题。
4 2
1 1 2 4
#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define mm(a, b) memset(a, b, sizeof(a))
#define ll long long
#define mp make_pair
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int N = 1e6 + 10;
int t, sum, cnt = 0, n, k, a[N];
bool vis[N];
bool ip(int x)
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i++)
if (x % i == 0)
return false;
return true;
}
void dfs(int t, int sum, int len) {
if (len == k) {
if (ip(sum)&&!vis[sum]) cnt++;
vis[sum]=1;
return;
}
if (t > n) return;
dfs(t + 1, sum, len);
dfs(t + 1, sum + a[t], len + 1);
}
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
mm(vis, 0);
dfs(1, 0, 0);
cout << cnt;
}
int main() {
ios;
int t = 1;
while (t--) {
solve();
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define mm(a, b) memset(a, b, sizeof(a))
#define ll long long
#define mp make_pair
typedef unsigned long long ull;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;
const int N = 1e6 + 10;
int t, sum, cnt = 0, n, k, a[N];
bool vis[N];
bool ip(int x)
{
if (x < 2) return false;
for (int i = 2; i <= x / i; i++)
if (x % i == 0)
return false;
return true;
}
void dfs(int t, int sum, int len) {
if (len == k) {
if (ip(sum)) cnt++;
return;
}
if (t > n) return;
dfs(t + 1, sum, len);
dfs(t + 1, sum + a[t], len + 1);
}
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; i++) cin >> a[i];
mm(vis, 0);
dfs(1, 0, 0);
cout << cnt;
}
int main() {
ios;
int t = 1;
while (t--) {
solve();
}
return 0;
}