无重复元素的数组和目标数 dfs

朋友分享的一道面试题

请输入图片描述

#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
const int maxn = 105;
int arr[maxn];
int target;
int cnt;
int n;
int pos;
multiset<int> ms;
void dfs(int num,int pos){
    if(num == target){
        cnt++;
        multiset<int> :: iterator iter;
        for(iter = ms.begin();iter != ms.end() ; ++iter ){
            cout<<*iter<<" ";
        }
        cout<<endl;
        return ;
    }
    if(num > target){
        return ;
    }
    
    for(int i = pos; i< n ; ++i){
        
        pos = i;
        
        num+=arr[i];
        ms.insert(arr[i]);
        dfs(num,pos);
        num-=arr[i];
        ms.erase( ms.find(arr[i]) );
    
    }
}
int main(){
    while(cin>>n>>target){
        for(int i = 0;i< n; ++i){
            cin>>arr[i];
        }
        int num = 0;
        cnt = 0;
        multiset<int> ms;
        dfs(num,0);
        cout<<cnt<<endl;
    }
    return 0;
} 
Last modification:November 11th, 2019 at 09:31 pm
如果觉得我的文章对你有用,请随意赞赏