2 条题解

  • 2
    @ 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
      @ 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

      信息

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