子集枚举 0pct

P1036 [NOIP2002 普及组] 选数

@[jonnyyuan](/user/1010570) 一道很明显的递归题 看下代码 , 解析在注释里 : ```cpp #include<bits/stdc++.h> using namespace std; int n,k; int a[21]; int ans; bool zhishu(int num){ if(num==0||num==1){ return 0;//质数特判 } for(int i=2;i*i<=num;i++){ if(num%i==0){ return 0; } } return 1; } void zhaoshu(int geshu,int sum,int head){ //geshu:已经选了几个 //sum:当前的和 //head:下一个值前一个的位置 if(geshu==k){ if(zhishu(sum)==1){ ans++;//符合质数的条件 } return; }else { for(int i=head;i<=n;i++){ zhaoshu(geshu+1,sum+a[i],i+1);//继续递归 } return; } } int main(){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); //输入 zhaoshu(0,0,1); cout<<ans; return 0; } ```
by GXZJQ @ 2023-12-26 19:48:34


@[jonnyyuan](/user/1010570) 您好像理解错了题意并且没有输入k 子集枚举因该会超时
by chennie @ 2023-12-31 11:00:49


@[jonnyyuan](/user/1010570) 1.请在理解一下题意;2.要使用 __builtin_popcount()函数来定k
by axbkY321 @ 2024-02-11 13:49:04


|