组合数问题

#include <iostream>

#include <cstdio>

using namespace std;

int n,r;

int ans[100];

int fun(int i,int x)  //功能单元:根据现在的深度和上一次选出来的数字,决定下一次选出的数

{

    if(i==r)

    {

        for(int j=0;j<r;j++)      //这个for循环决定了决策树伸展到哪一步

            printf("%d ",ans[j]);  //输出dfs每一支的前r个

        cout<<endl;

        return 0;

    }

    for(int y=x;y<=n-(r-i)+1;y++)  //为了保证给后面的留出位置

    {

        ans[i]=y;     //这里对ans数组是有覆盖的,所以只需要ans数组开得和r一样大就行了

        fun(i+1,y+1);  //i最大不超过r

    }

    

}

int main()

{

    cin>>n>>r;  //输入要计算的组合数

    fun(0,1);   //从深度为0,基数为1开始

    return 0;

}

这篇文章,是又一个故事的结束...
lazy's story is continuing.
原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/13764140.html