문제 : https://www.acmicpc.net/problem/18429


[알고리즘풀이]

 백트레킹을 통해 전체 경우의 수에 대해서 중량 500이 되는지 안되는지 확인하면 됩니다.

#include<iostream>

using namespace std;

int N, K, A[8] = {}, ans = 0;
bool check[8] = {};

void BT(int count, int sum) {
	if (count == N){
		ans++;
		return;
	}
	for (int i = 0; i < N; i++) {
		if (check[i] == false && sum + A[i] >= 0) {
			check[i] = true;
			BT(count + 1, sum + A[i]);
			check[i] = false;
		}
	}
	return;
}
int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	cin >> N >> K;
	for (int i = 0; i < N; i++){
		cin >> A[i];
		A[i] -= K;
	}
	for (int i = 0; i < N; i++){
		if(A[i] >= 0){
			check[i] = true;
			BT(1, A[i]);
			check[i] = false;
		}
	}
	cout << ans;
}

 

+ Recent posts