본문 바로가기
algorithm/ACMICPC

부분수열의 합 - 1182

by 에어컨조아 2019. 12. 3.

문제 : https://www.acmicpc.net/problem/1182

 

1182번: 부분수열의 합

첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다.

www.acmicpc.net

 

코드 : 

#include <iostream>
#include <vector>
using namespace std;

int num[20] = { 0 };
vector<int> temp;
int ncount = 0;
int n, s;

void solution(int index, int sum)
{
	//탈출조건
	if (index == n)
	{
		if (sum == s)
		{
			ncount+=1;
		}
		return;
	}

	//다음경우
	solution(index + 1, sum + num[index]);
	solution(index + 1, sum);
}

int main()
{
	cin >> n >> s;

	for (int i = 0; i < n; i++)
	{
		cin >> num[i];
	}
	solution(0, 0);
	if (s == 0) // 공집합일때 도 0임으로 이를 빼준다. 문제가 조금 애매모호함... 공집합 제외라는 말이 없음..
	{
		ncount -= 1;
	}
	cout << ncount;
	return 0;
}

'algorithm > ACMICPC' 카테고리의 다른 글

사다리 조작 - 15684  (0) 2019.12.08
퇴사 - 14501  (0) 2019.12.03
암호 만들기 -1759  (0) 2019.12.03
연산자 끼워넣기 (2) - 15658  (0) 2019.12.03
연산자 끼워넣기 - 14888  (0) 2019.11.25

댓글