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背包思想解决组合问题并输出组合的主要内容,如果未能解决你的问题,请参考以下文章