22.07.06

bin1225·2022년 7월 6일
0

c++ 알고리즘

목록 보기
13/35
  1. 합이 같은 부분집합(DFS)
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 문제가 아니었다면 시간이 오래 걸렸을 것 같다.

0개의 댓글