求助
  • 板块灌水区
  • 楼主Sukilin
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/25 14:02
  • 上次更新2023/11/3 01:19:11
查看原帖
求助
959201
Sukilin楼主2023/8/25 14:02

这段的时间复杂度是什么?我发现我无法分析递归算法的时间复杂度,试图在百度上学习,但学习不了

#include<bits/stdc++.h>
#define MAXN 30
using namespace std;
int n,k,ans,x[MAXN];
int chosen[MAXN];
bool prime(int p){
    for(int i=2;i*i<=p;i++){
        if(p%i==0)  return false;
    }
    return true;
}
int sum(){
    int s=0;
    for(int i=1;i<=n;i++){
        if(chosen[i]==1){
            s+=x[i];
        }
    }
    return s;
}
int cnt(){
    int s=0;
    for(int i=1;i<=n;i++){
        if(chosen[i]==1){
            s++;
        }
    }
    return s;
}
void dfs(int m){
    if(m>n){
        if(prime(sum())&&cnt()==k){
            ans++;
            return;
        }
    }
    else{
        if(cnt()<k){
            chosen[m]=1;
            dfs(m+1);
            chosen[m]=-1;

        }
        chosen[m]=0;
        dfs(m+1);
        chosen[m]=-1;
    }
}

int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        scanf("%d",&x[i]);
    }
    dfs(1);
    printf("%d\n",ans);

    return 0;
}
2023/8/25 14:02
加载中...