49分求助,过了1,2,5
查看原帖
49分求助,过了1,2,5
1109967
korone楼主2024/1/12 14:56
#include<iostream>
#include<queue>
#include<stack>
#include<algorithm>
#include<math.h>
#include<stdlib.h>
using namespace std;
int num[30];
bool state[30];
int n,k;
int ans = 0;
int temp = 0;
stack<int> q;

bool ifPrime(int v)
{
    if(v==2) return true;
    else if(v==1) return false;
    for(int i = 2;i<sqrt(v);i++){
        if(v%i==0) return false;
    }
    return true;
}

void dfs(int v)
{
    //判断每一小轮循环如何终止
    if(v==k)
    {
        //cout<<temp<<"\n";
        if(ifPrime(temp)==true){
            ans++;
        }
        return;
    }else
    {
        for(int i = v;i<n;i++)
        {
            if(state[i]==false)
            {
                if(n-i+q.size()<k){
                    return;
                }
                //进行操作
                state[i] = true;
                temp += num[i];
                q.push(num[i]);

                //往下走一步
                dfs(v+1);

                //操作回溯
                state[i] = false;
                temp-=q.top();
                q.pop();
            }
        }
    }


}
int main()
{
    cin>>n>>k;
    for(int i = 0;i<n;i++)
    {
        cin>>num[i];
        state[i] = false;
    }
    dfs(0);
    cout<<ans;
	return 0;
}
2024/1/12 14:56
加载中...