购物网站开发需求,wordpress预约订单插件,网站优化公司推荐,网站手机站怎么做一、指数型枚举 1、题目#xff1a;
从 1∼n1∼ 这 n 个整数中随机选取任意多个#xff0c;输出所有可能的选择方案。
输入格式
输入一个整数 n。
输出格式
每行输出一种方案。
同一行内的数必须升序排列#xff0c;相邻两个数用恰好 11 个空格隔开。
对于没有选任何…一、指数型枚举 1、题目
从 1∼n1∼ 这 n 个整数中随机选取任意多个输出所有可能的选择方案。
输入格式
输入一个整数 n。
输出格式
每行输出一种方案。
同一行内的数必须升序排列相邻两个数用恰好 11 个空格隔开。
对于没有选任何数的方案输出空行。
本题有自定义校验器SPJ各行不同方案之间的顺序任意。
数据范围
1≤n≤15 2、代码
#includeiostream #includecstring using namespace std; const int N20; int n; bool st[N]{false}; void dfs(int u){ if(un){ for(int i1;in1;i){ if(st[i]true){ printf(%d ,i); } } coutendl; return; } for(int i0;i2;i){ if(i1){ st[u]true; dfs(u1); } else{ st[u]false; dfs(u1); } } return; } int main(){ cinn; dfs(1); return 0; }
二、排列型枚举 1、题目
把 1∼n1∼这 n 个整数排成一行后随机打乱顺序输出所有可能的次序。
输入格式
一个整数 n。
输出格式
按照从小到大的顺序输出所有方案每行 11 个。
首先同一行相邻两个数用一个空格隔开。
其次对于两个不同的行对应下标的数一一比较字典序较小的排在前面。
数据范围
1≤n≤9 2、代码
#includeiostream #includecstring using namespace std; const int N10; bool st[N]{false}; int nums[N]; int n; void dfs(int u){ if(un){ for(int i1;in1;i){ printf(%d ,nums[i]); } coutendl; return; } for(int i1;in1;i){ if(st[i]false){ st[i]true; nums[u]i; dfs(u1); st[i]false; } } } int main(){ cinn; dfs(1); return 0; }
三、组合型枚举 1、题目
从 1∼n1∼这 n 个整数中随机选出 m 个输出所有可能的选择方案。
输入格式
两个整数 n,m,在同一行用空格隔开。
输出格式
按照从小到大的顺序输出所有方案每行 11 个。
首先同一行内的数升序排列相邻两个数用一个空格隔开。
其次对于两个不同的行对应下标的数一一比较字典序较小的排在前面例如 1 3 5 7 排在 1 3 6 8 前面。
数据范围
n0 , 0≤m≤n , n(n−m)≤25 2、代码
#includeiostream using namespace std; const int N30; int a[N]; bool st[N]; int n,m; void dfs(int u) { if(um) { for(int i0;im;i){ couta[i] ; } coutendl; return ; } for(int i1;in;i) { if(st[i]false(!u||ia[u-1])) { st[i]true; a[u]i; dfs(u1); st[i]false; } } } int main() { cinnm; dfs(0); return 0; }