66分DFS求助!
查看原帖
66分DFS求助!
577302
Martin8521楼主2022/1/27 09:32
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
int number[20];
int ans = 0;
vector <int> v;

bool isprim(int a){
    for (int i = 3;i <= a / 2;i += 2){
        if (a % i == 0 && a / i != 1){
            return false;
        }
    }
    return true;
}

int dfs(int k,int n){
    if (v.size() >= k){
        int sum = 0;
        for (int i = 0;i < v.size();i++){
            //cout << number[v[i]] << ' ';
            sum += number[v[i]];
        }
        if (isprim(sum))ans++;
        //cout << ' ' << sum << endl;
        return 1;
    }
    for (int i = v.size();i < min(int(v.size() + k + 1),n);i++){
        bool flag = false;
        for (int j = 0;j < v.size();j++){
            if (v[j] >= i){
                flag = true;
                break;
            }
        }   
        if (flag)continue;
        v.push_back(i);
        dfs(k,n);
        v.pop_back();
    }
}

int main(){
    int n,k;
    cin >> n >> k;
    memset(number,0,sizeof(number));
    for (int i = 0;i < n;i++)cin >> number[i];
    dfs(k,n);
    cout << ans;
}

刚学的DFS,#3 #6没有过,第三个点样例给的是13,程序输出是14,求助!

不会是质数判断写错了吧?

2022/1/27 09:32
加载中...