문제 : 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;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 17070 : 파이프 옮기기1 - travelbeeee (0) | 2020.02.13 |
---|---|
[BOJ] 17136 : 색종이 붙이기 - travelbeeee (0) | 2020.02.12 |
[BOJ] 14890 : 경사로 - travelbeeee (0) | 2020.02.07 |
[BOJ] 1946 : 신입 사원 - travelbeeee (0) | 2020.02.07 |
[BOJ] 10990 : '별 찍기 - 15' -travelbeeee (0) | 2020.02.07 |