频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
求几个数的组合数 容斥原理
2012-08-03 14:40:11           
收藏   我要投稿
 准备做一些容斥原理的题目,其中容斥原理要求一个数的因子的任意组合。比如 30 = 2 * 3 * 5,则需要求出(2),(3),(5),(2,3),(2,5),(3,5),(2,3,5)这些组合,可以用dfs实现,写了一个,留下来作个模板。
代码:
[cpp] 
#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; 
    } www.2cto.com
    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; 


作者:wmn_wmn
点击复制链接 与好友分享!回本站首页
相关TAG标签 个数 原理 容斥
上一篇:线索二叉树
下一篇:hdu2037 今年暑假不AC
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站