2 条题解
-
2
蒟蒻の题解
这道题大部分人第一眼看上去会觉得难,为什么呢?因为他这里的题意太过于《抽象》,我们看数据可能会好懂一些。 其实我们仔细看数据的话,一些学过排列组合的同学就会说了:
这不就是几个排列组合叠加在一起嘛。
嗯,是的,这道题你仔细看数据就会发现,那么恭喜你,你已经成功
猜想出了这道题的基本思路,这道题只需要用dfs去模拟排列组合的过程,然后再多来几次就行啦。
没错,就是这么“简单”
#include<bits/stdc++.h> using namespace std; int n,m; int b[20]; void dfs(int s,int last){ if(s>m){ for(int i=1;i<=m;i++) cout<<b[i]<<" "; cout<<endl; return; }for(int i=last+1;i<=n;i++){ b[s]=i; dfs(s+1,i); } } int main(){ cin>>n; for(m=1;m<=n;m++){ dfs(1,0); } return 0; }
bye
-
1
#include <queue> #include <math.h> #include <stack> #include <vector> #include <stdio.h> #include <iostream> #include <vector> #include <iomanip> #include <string.h> #include<cstring> #include <algorithm> using namespace std; #define LL long long const int N = 1e2 + 10; const int INF = 0x3f3f3f3f; using namespace std; int n , a[N]; void f(int pre ,int step) { if(step > 0) { for(int i = 0 ;i < step ; i++) { cout << a[i] <<" "; } cout << endl ; } for(int i = pre + 1 ;i <= n ; i++ ) { a[step] = i ; f(i , step + 1); } } int main() { cin >> n ; f( 0 , 0 ); return 0; }
- 1
信息
- ID
- 5
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 605
- 已通过
- 284
- 上传者