본문 바로가기

백준

16938 캠프 준비

비트마스크로 부분집합 구해서 풀었다. N이 15밖에 안 돼서 이렇게 풀 수 있을 것 같았다. 

 

 

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <functional>
#include <string>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cmath>
#include <cstring>
#include <bitset>

#define xx first
#define yy second
#define all(x) (x).begin(), (x).end()

using namespace std;
using i64 = long long int;
using ii = pair<int, int>;
using ii64 = pair<i64, i64>;

int     main()
{
    int n, l, r, x;
    scanf("%d %d %d %d", &n, &l, &r, &x);
    
    vector<int> v(n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &v[i]);
    }
    
    sort(all(v));
    
    int cnt = 0;
    for (int i = 0; i < (1 << v.size()); i++)
    {
        int checkSize = 0;
        int sum = 0;
        int start = 10000000;
        int last = 0;
        for (int j = 0; j < v.size(); j++)
        {
            if (i & (1 << j))
            {
                checkSize++;
                sum += v[j];
                start = min(start, v[j]);
                last = max(last, v[j]);
            }
        }
        if (checkSize <= 1)
            continue;
        if (l <= sum && sum <= r && (last - start) >= x)
            cnt++;
    }
    printf("%d\n", cnt);

    return 0;
}

'백준' 카테고리의 다른 글

2090 조화평균  (0) 2021.07.17
12850 본대 산책2  (0) 2021.07.17
12916 K-Path  (0) 2021.07.17
11423 Primes  (0) 2021.05.15
20300 서강 근육 맨  (0) 2021.05.15