01背包思想解决组合问题并输出组合

Posted glcat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01背包思想解决组合问题并输出组合相关的知识,希望对你有一定的参考价值。

//01背包思想 每个数都有 选 与 不选 两种可能
#include<cstdio>
int n, r;
bool Vis[21] = {false};
void DFS(int index, int nowR){
    
    //边界
    if(index == n+1){            // 说明已经遍历完了 n个数
        if(nowR == r) {          //说明刚好选了r个数
            for(int i = 1; i <= n; i++ ){
                if(Vis[i])    printf("%d", i); //输出组合
            }
            printf(" ");
        }
        return ;
    }
    //选第index个
    if(nowR > r) return ;   //  剪枝
    Vis[index] = true;         //    标记已经用了
    DFS(index + 1, nowR + 1);
    Vis[index] = false;     //  释放
    
    //不选第index个
    DFS(index + 1, nowR);
}

int main(){
    
    scanf("%d%d", &n, &r);
    DFS(1,0);
    return 0;
}


































以上是关于01背包思想解决组合问题并输出组合的主要内容,如果未能解决你的问题,请参考以下文章

蛮力背包打印输出

CH5201 数组组合01背包

02方法-作业01-递归练习

377. 组合总和 Ⅳ(背包dp)

背包问题 codevs2210 数字组合

背包问题