5 条题解

  • 0
    @ 2024-4-10 16:33:53
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    #include<climits>
    #include<vector>
    using namespace std;
    int n,r;
    vector<int> res;
    void dfs(int startIndex,int countNum,int nums[],int used[]){
    //	处理递归终止的条件
    	if(countNum>r){
    		for(auto temp:res) cout<<temp<<" ";
    		cout<<endl;
    		return;
    	}
    //	处理递归的单层逻辑
    	for(int i=startIndex;i<n;i++){
    		if(used[i]==1) continue;
    		used[i]=1;
    		res.push_back(nums[i]);
    		dfs(i+1,countNum+1,nums,used);
    		used[i]=0;	
    		res.pop_back();
    		
    	}
    }
    int main(){
    	cin>>n>>r;
    	int nums[n];
    	int used[n]={0};
    	for(int i=0;i<n;i++) scanf("%d",&nums[i]);
    	sort(nums,nums+n);
    	dfs(0,1,nums,used);//从第一个数开始选
    	return 0;
    }
    
    

    信息

    ID
    83
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    278
    已通过
    104
    上传者