티스토리 뷰

Problem/BOJ

1208 - 부분집합의 합 2

kesakiyo 2016. 11. 15. 01:07

문제 링크



https://www.acmicpc.net/problem/1208



문제 요약



크기 \(N\)인 집합이 주어진다. 이 때 부분집합의 합이 \(S\)가 되는 경우의 수를 구하는 문제다.



문제 풀이



\(N\)이 최대 40이기 때문에 완전탐색으로는 안된다. 따라서 다른 방법이 필요하다. 이런 경우에는 왼쪽 절반과 오른쪽 절반의 모든 경우의 수를 각각 구하고 이분탐색을 통해 이 경우의 수를 합쳐나갈 수 있다.


크기 \(N\)인 집합을 왼쪽부터 \(N \above 1pt 2\)개의 완전탐색 경우의 나머지 오른쪽의 완전탐색 경우를 다 구해 놓는다. 이 때 왼쪽의 경우의 수와 오른쪽 경우의 수를 어떻게 합쳐야 할까? 왼쪽의 경우 중 가능한 한가지 합이 \(x\)라고 가정을 해 보자. 그렇다면 오른쪽 경우의 수에서 찾아야 할 합은 \(S-x\)가 될 것이다. 따라서 왼쪽의 경우의 수에 대해서 가능한 오른쪽의 모든 경우의 수를 찾아 답에 누적해 나가면 된다.


\(N\)이 40일 때 시간복잡도는 \(O(2^{20}log2^{20})\)이므로 시간내에 들어올 수 있다.



소스 코드




'Problem > BOJ' 카테고리의 다른 글

11670 - 초등 수학  (0) 2016.11.16
13344 - Chess Tournament  (0) 2016.11.15
1867 - 돌멩이 제거  (1) 2016.11.14
2843 - 마블  (1) 2016.11.14
1704 - 붕어빵타이쿤  (1) 2016.11.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함