Hoon222y

[BOJ 1182] 부분집합의 합 본문

코딩/BOJ & 알고스팟

[BOJ 1182] 부분집합의 합

hoon222y 2017. 5. 25. 11:35

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


n의 범위가 작으므로 그냥 재귀를 통한 완전탐색을 활용한다. 

이때 s==0일때는 공집합이므로 예외처리를 해주어야 한다. 


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
31
32
33
34
35
36
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#include <algorithm>
#define INF 1e18
typedef long long  ll;
using namespace std;
 
int n,s,arr[44],ans;
 
void solve(int cur , int sum){
    if(cur == n+1){ // 해당 범위를 벗어날때
        if(sum == s){
            ans ++;
        }
        return;
    }
    solve(cur+1,sum);
    solve(cur+1,sum+arr[cur]);
}
 
int main(){
    ans = 0;
    cin >> n >>s;
    for(int i=1;i<=n;i++){
        cin >> arr[i];
    }
    solve(1,0);
    if(s == 0){
        ans--;
    }
    cout << ans <<endl;
}
 
cs


'코딩 > BOJ & 알고스팟' 카테고리의 다른 글

[BOJ 1194] 달이 차오른다, 가자.  (1) 2017.06.15
[BOJ 14614] Calculate!  (3) 2017.05.30
[BOJ 1261] 알고스팟  (0) 2017.05.24
[BOJ 14499] 주사위 굴리기  (2) 2017.04.11
[BOJ 13460] 째로탈출2  (0) 2017.04.11
Comments