排列和组合枚举都是暴力基础啦,虽然很简单但是总结一下比较好
组合
先从简单的说起吧,比如说从n个数里选k个
先放代码:
void combination(int cur,int cnt)//cur为当前数,cnt为已选择数的个数
{
if(cnt==k) return ;
for(int i=cur;i<=n;i++)
{
dfs(i+1,cnt+1);
}
}
conbination(1,0);
(这里的n, k, cur, cnt均指序号)
这种思路并不难理解,要保证每一位数前面都没有出现,可以直接从小到大,每一位都枚举上一位后面的数,通过递归就能把所有的组合都枚举出来啦。
排列
最准确的排列算法是通过一步步进化来的
Again,比方说从n个数里选出k个进行排列
最傻白甜的一个写法:
bo