求几个数的组合数 容斥原理

来源:互联网 发布:淘宝店铺个性公告范文 编辑:程序博客网 时间:2024/05/20 23:39

     准备做一些容斥原理的题目,其中容斥原理要求一个数的因子的任意组合。比如 30 = 2 * 3 * 5,则需要求出(2),(3),(5),(2,3),(2,5),(3,5),(2,3,5)这些组合,可以用dfs实现,写了一个,留下来作个模板。

代码:

#include <iostream>#include <cstdio>#include <string.h>using namespace std;#define CLR(arr,val) memset(arr,val,sizeof(arr))int num[4]={2,3,5,7};int linnum[4];int flag[4];void dfs(int id,int begin,int cnt){if(id == cnt){  for(int i = 0;i < 4;++i)  printf("%d ",linnum[i]);  printf("\n");  return;}for(int i = begin;i < 4; ++i){if(!flag[i]){  flag[i] = true;  linnum[id] = num[i];  dfs(id+1,i,cnt);  flag[i] = false;}}}int main(){for(int i = 1;i <= 4;++i){CLR(flag,0);CLR(linnum,0);  dfs(0,0,i);  printf("ss\n");}return 0;}


原创粉丝点击