[ACM 1015] 组合数算法

[ACM 1015] 组合数算法

简单的事情
Time Limit:1000MS  Memory Limit:32768K

Description:

数学天才fans曾经说过一句话:组合数的计算是一件非常简单的事情。组合数的计算真的是一件非常简单的事情吗?请你自己去尝试一下吧!

Input:

输入中的一些整数对n,m(m≤n≤20)

Output:

输出其组合数。

Sample Input:

5 2
18 13

Sample Output:

10
8568
#include  < cstdlib >
#include 
< iostream >
#include 
< string >
#include 
< vector >

using   namespace  std;

static   char   *  num;
static   int  m,n;
static   int  sum = 0 ;
             
void  dfs( string  subtree, int  level)
{
     
   
int i=0;
   
if(level==n)
   
{
       
//cout<<subtree<<endl;
       sum++;
       
return;        
   }

   
if(subtree.size()==0) i=0;
   
else
   
{
   
for(i=0;i<m;i++)
      
if(subtree[subtree.size()-1]==num[i])
             
break;
   i
++;
   
   }

   
for(;i<m;i++)
   
{
      dfs(subtree
+num[i],level+1);            
   }

         
}


int  main( int  argc,  char   * argv[])
{
    
while(scanf("%d%d",&m,&n)!=EOF)
    
{
        
if(m<=20)
           
if(n<=m) 
           
{
              sum
=0;
              num
=new char[m];
                
for(int i=0;i<m;++i)
                  num[i]
=i+'1';
                dfs(
"",0);   
                cout
<<sum<<endl;      
                delete num;
                    }
           
    }

         
    
//system("PAUSE");
    return 0;
}

你可能感兴趣的:([ACM 1015] 组合数算法)