1208 - 부분집합의 합 2
- 알고리즘 / 문제풀이
- 2016. 11. 15. 01:07
문제 링크
https://www.acmicpc.net/problem/1208
문제 요약
크기
문제 풀이
크기
소스 코드
코드 보기
#include <stdio.h> #include <vector> #include <algorithm> using namespace std; int N, S, A[41]; void func(int pos, int end, int sum, vector<int>& vi) { if (pos == end) { vi.push_back(sum); return; } func(pos + 1, end, sum, vi); func(pos + 1, end, sum + A[pos], vi); } int main() { scanf("%d%d", &N, &S); for (int i = 0 ; i < N ; ++i) { scanf("%d", &A[i]); } vector<int> L, R; func(0, N / 2, 0, L); func(N / 2, N, 0, R); sort(R.begin(), R.end()); long long ans = 0; for (int val : L) { int target = S - val; auto hi = upper_bound(R.begin(), R.end(), target); auto lo = lower_bound(R.begin(), R.end(), target); ans += hi - lo; } if (S == 0) { --ans; } printf("%lld\n", ans); }
'알고리즘 > 문제풀이' 카테고리의 다른 글
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 |