32分dfs求助!!!救命!!
查看原帖
32分dfs求助!!!救命!!
550620
maoding楼主2022/7/26 14:03
#include <iostream>
using namespace std;

int n, k, a[100010], c[100010], cnt = 0;
bool isPrime(int x)
{
	if (x < 2) return false;
    for (int i = 2; i * i <= x; i++)
    {
        if (x % i == 0)
        {
        	return false;
        }
    }
    return true;
}

bool check()
{
	int s = 0;
	for (int i = 1; i <= n; i++)
	{
		if (a[i] == 1) s += c[i];
	}
	return isPrime(s);
}

void dfs(int step, int sum)
{
    if (step > n && sum < k) return;
    if (sum == k)
    {
        if (check()) cnt++;
        return;
    }
    a[step] = 0;
    dfs(step + 1, sum);
    a[step] = 1;
    dfs(step + 1, sum + 1);
}

int main()
{
    cin >> n >> k;
    for (int i = 1; i <= n; i++)
    {
        cin >> c[i];
    }
    dfs(1, 0);
    cout << cnt << endl;
    return 0;
}

大佬看一下哪错了 谢谢

2022/7/26 14:03
加载中...