算法时间复杂度
- 由数据范围反推算法复杂度以及算法内容
- 常见数值
递归
- 递归算法搞清顺序很重要,要求不重不漏
- 递归的过程:画递归搜索树
- 递归:把某一个问题分解成若干同种子问题
例题1:递归实现指数型枚举
//递归实现指数型枚举
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=16;
int n;
int st[N];//记录每个位置当前的状态:0——还没考虑 1——选择它 2——不选它
void dfs(int u)
{
if(u>n)
{
for(int i=1;i<=n;i++)
if(st[i]==1)
printf("%d ",i);
printf("\n");
return;
}
st[u]=2;
dfs(u+1);//第一个分支不选
st[u]=0;//恢复现场
st[u]=1;
dfs(u+1);//第二个分支选
st[u]=0;
}
int main()
{
cin>>n;
dfs(1);//从第一个位置的数开始判断其选不选
return 0;
}
例题2:递归实现排列型枚举<