비트마스크로 부분집합 구해서 풀었다. 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 |