目录
深搜点的枚举类型
//对点的枚举 flood fill
//油田 数的计算
#include<bits/stdc++.h>
#define rep(i,n) for(int i=1;i<=n;++i)
using namespace std;
int n,ans;
void dfs(int x)
{ ans++;
if(x==1) return;
for(int i=1;i<=x/2;++i)
dfs(i);
}
int main()
{ cin>>n;
dfs(n);
cout<<ans;
return 0;
}
//优化 记忆化
#include<cstdio>
#include<iostream>
using namespace std;
int f[1005];
int pand(int m)
{ if(m==1) return 1;
if(f[m]) return f[m];
f[m]=1;
for(int i=1;i<=m/2;i++)
f[m]+=pand(i);
return f[m];
}
int main()
{ int n;
cin>>n;
cout<<pand(n);
return 0;
}
深搜路径枚举全排列
#include<cstdio>
#include<iostream>
//例题: 迷宫 八皇后 微信步数前30分
using namespace std;
int rd[20],vis[20],ans=0;
int n,k;
void dfs(int step)
{ if(step==k+1)
{ for(int i=1;i<=k;++i)
cout<<rd[i]<<" ";
cout<<endl;
ans++;
return ;
}
for(int i=1;i<=n;++i)
if(!vis[i])
{ rd[step]=i;
vis[i]=1;
dfs(step+1);
vis[i]=0;
}
}
int main()
{ cin>>n>>k;// A(n,k)
dfs(1);
cout<<"A("<<n<<","<<k<<")="<<ans<<endl;
return 0;
}
深搜路径枚举全组合
//全组合 P1036 [NOIP2002 普及组] 选数
#include<cstdio>
#include<iostream>
using namespace std;
int rd[20],ans=0;
int n,k;
void dfs(int now,int step)
{ if(step==k+1)
{ ans++;
for(int i=1;i<=k;++i)
cout<<rd[i]<<" ";
cout<<endl;
return;
}
for(int i=now+1;i<=n;++i)
rd[step]=i,dfs(i,step+1);
}
int main()
{ cin>>n>>k;// c(n,k)
dfs(0,1);
cout<<"c("<<n<<","<<k<<")="<<ans<<endl;
return 0;
}