알고리즘/백준

BOJ16938 캠프준비 / C++

내이름은 킹햄찌 2022. 3. 13. 00:27

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

 

16938번: 캠프 준비

난이도가 10, 30인 문제를 고르거나, 20, 30인 문제를 고르면 된다.

www.acmicpc.net

백준 온라인저지 16938번 캠프준비 문제입니다.

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int n, l, r, x;
vector<int> arr;
void Input() {
	cin >> n >> l >> r >> x;
	int sum;
	for (int i = 0; i < n; i++) {
		cin >> sum;
		arr.push_back(sum);
	}
}

void solution() {
	int cnt = 0;
	sort(arr.begin(), arr.end());
	for (int i = 1; i < (1 << n); i++) {
		int total = 0;
		vector<int> p;
		for (int j = 0; j < n; j++) {
			if (i&(1 << j)) 
				p.push_back(arr[j]);					
		}
		if (p.size() < 2) continue;
		if (p[p.size()-1] - p[0] < x) continue;
		for (auto iter : p) 
			total += iter;

		if (total >= l && total <= r)
			cnt++;
	}
	cout << cnt;
}

int main(void) {
	Input();
	solution();
}

아이디어

비트마스킹을 이용하여 모든 경우의수를 확인 할 수 있고, 조건에 유의하여 풀이