int sum=0, flag =0;
int n;
vector<int> cnt;
void DFS(int l){
int num = sum;
if(l==n){
if(sum==0){
flag =1;
return;
}
}
else{
sum= num + cnt[l];
DFS(l+1);
sum = num-cnt[l];
DFS(l+1);
}
}
int main(){
//freopen("input.txt","rt",stdin);
int tmp;
cin>>n;
for(int i=0; i<n; i++){
cin>>tmp;
cnt.push_back(tmp);
}
DFS(0);
if(flag ==1)
cout<<"YES";
else
cout<<"NO";
return 0;
}
재귀함수를 이용한 DFS를 배우고 첫 문제였다. 이전에 예제로 풀어준 문제와 비슷한 구조라서 쉽게 풀었지만, 이게 DFS 문제가 아니었다면 시간이 오래 걸렸을 것 같다.