无重复元素的数组和目标数 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;
}