2 条题解

  • 2
    @ 2024-1-26 15:45:01

    递归实现指数型枚举

    #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
      @ 2025-2-11 19:05:41

      蒟蒻の题解

      这道题大部分人第一眼看上去会觉得难,为什么呢?因为他这里的题意太过于《抽象》,我们看数据可能会好懂一些。 其实我们仔细看数据的话,一些学过排列组合的同学就会说了:

      这不就是几个排列组合叠加在一起嘛。

      嗯,是的,这道题你仔细看数据就会发现,那么恭喜你,你已经成功 想出了这道题的基本思路,这道题只需要用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

      信息

      ID
      5
      时间
      1000ms
      内存
      128MiB
      难度
      4
      标签
      递交数
      607
      已通过
      286
      上传者