当日总结
递归实现组合型枚举:
include
include
using namespace std;
int n,r;
const int N=30;
int arr[N];
int arr1[N];
int cnt=0;
bool isSu(int x){
if(x<2)return false;
if(x2)return true;
for(int i=2;i<=sqrt(x);i++)
{
if(x%i0)return false;
}
return true;
}
void dfs(int x,int start)
{
if(x>r){
int sum=0;
for(int i=1;i<=r;i++)
{
sum+=arr[i];
}
if(isSu(sum))cnt++;
return;
}
for(int i=start;i<=n;i++)
{
arr[x]=arr1[i];
dfs(x+1,i+1);
arr[x]=0;
}
}
int main(){
cin>>n>>r;
for(int i=1;i<=n;i++)
{
cin>>arr1[i];
}
dfs(1,1);
cout<<cnt;
return 0;
}
递归实现指数型枚举
include
using namespace std;
const int N=20;
int n;
int st[N];
void dfs(int x){
if(x>n){
for(int i=1;i<=n;i++)
{
if(st[i]==1)
printf("%d ",i);
}
cout<<endl;
return;
}
st[x]=1;
dfs(x+1);
st[x]=0;
st[x]=0;
dfs(x+1);
//st[x]=0;
}
int main(){
scanf("%d",&n);
dfs(1);
return 0;
}
递归实现排列型枚举
include
include
using namespace std;
int n,r;
const int N=20;
int arr[N];
void dfs(int x,int start)
{
if(x>r){
for(int i=1;i<=r;i++)
{
cout<<setw(2)<<arr[i];
}
cout<<endl;
return;
}
for(int i=start;i<=n;i++){
arr[x]=i;
dfs(x+1,i+1);
arr[x]=0;
}
}
int main(){
cin>>n>>r;
dfs(1,1);
return 0;
}

浙公网安备 33010602011771号