组合问题
題目描述
從 1~n 這 n 個整數(shù)中隨機(jī)選出 m 個,輸出所有可能的選擇方案。n>0,? 0<=m<=n,? n+(n-m)<=25。??
輸入
一個整數(shù)n。?
輸出
按照從小到大的順序輸出所有方案,每行1個。首先,同一行內(nèi)的數(shù)升序排列,相鄰兩個數(shù)用一個空格隔開。其次,對于兩個不同的行,對應(yīng)下標(biāo)的數(shù)一一比較,字典序較小的排在前面(例如1 3 9 12排在1 3 10 11前面)。
?
樣例輸入
5 3?
樣例輸出
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5提示
m=0的時候一定要特判,不然必WA;
#include<bits/stdc++.h> using namespace std; int a[100]; void f(int i,int n,int m,vector<int> s) {int j,temp;for(; i<n-m+1; i++){temp=a[i];if(a[i]){s.push_back(a[i]);a[i]=0;if(m>1)f(i+1,n,m-1,s);else{for(j=0; j<s.size()-1; j++)cout<<s[j]<<' ';cout<<s[j]<<endl;}s.pop_back();}a[i]=temp;} } int main() {int i,n,m;cin>>n>>m;if(m==0)cout<<endl;else{for(i=0; i<n; i++)a[i]=i+1;vector<int> s;f(0,n,m,s);}return 0; } View Code #include <bits/stdc++.h> #define ll long long #define met(a) memset(a,0,sizeof(a)) #define inf 0x3f3f3f3f using namespace std; const int mod=1e9+7; int m,n,r,a[25]; void dfs(int x) {int i,j;for(i=a[x-1]+1; i<=n; i++){a[x]=i;if(x==r){for(j=1; j<=r; j++)cout<<setw(3)<<a[j];cout<<endl;}elsedfs(x+1);} } int main(void) {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cin>>n>>r;dfs(1);return 0; } dfs
?
轉(zhuǎn)載于:https://www.cnblogs.com/nublity/p/9269701.html
總結(jié)
- 上一篇: 谷歌SEO和百度SEO的区别
- 下一篇: AtCoder - 3954 Pain