题意:给你1~n个数从中任意选m个数,然后输出所有可能结果
思路:和上题一样,只不过由于多了一个限制,就是最多只能选m个数,所以多了一个状态条件,就是已选数字的个数sum,
递归边界也变了,只要是列举够m个数,就可以输出了。当列举到第n个数的时候,所有可能结果都列举完了,就可以返回不再列举了。
下面上代码。
#include<iostream> using namespace std; int n,m; void dfs(int cur,int sum,int state) { if(sum==m) { for(int i=0;i<n;i++) if(state>>i&1) cout<<i+1<<" "; cout<<"\n"; return ; } if(cur==n)return; else { dfs(cur+1,sum+1,state+(1<<cur)); dfs(cur+1,sum,state); } } int main() { cin>>n>>m; dfs(0,0,0); return 0; }