반응형
https://www.acmicpc.net/problem/1493
1493번: 박스 채우기
세준이는 length × width × height 크기의 박스를 가지고 있다. 그리고 세준이는 이 박스를 큐브를 이용해서 채우려고 한다. 큐브는 정육면체 모양이며, 한 변의 길이는 2의 제곱꼴이다. (1×1×1, 2×2×2,
www.acmicpc.net
1.문제설명
큰 정육면체부터 채워보면서
다 채울 수 있는지 재귀적으로 구해볼 수 있다.
남은 부분을 새로운 박스로 만드는 것에 대해
깊이 생각해볼 필요가 있다.
2.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int arr[20] , ans;
bool flag;
void rec(int l, int w, int h) {
if (l == 0 || w == 0 || h == 0) return;
for (int i = 19; i >= 0; i--) {
if (arr[i] == 0) continue;
int cur = 1 << i;
if (l >= cur && w >= cur && h >= cur) {
arr[i]--;
rec(l, w, h - cur);
rec(l-cur, w, cur);
rec(cur, w - cur, cur);
ans++;
return;
}
}
flag = true;
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int l, w, h, n;
cin >> l >> w >> h;
cin >> n;
for (int i = 0; i < n; i++) {
int a, b;
cin >> a >> b;
arr[a] = b;
}
rec(l, w, h);
if (flag) {
cout << -1 << '\n';
}
else {
cout << ans << '\n';
}
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 16236번 : 아기상어 - BFS C++ (0) | 2022.03.09 |
---|---|
백준 11660번 : 구간 합 구하기 5 - 누적합 C++ (0) | 2022.03.09 |
백준 13904번 : 과제 - 그리디 C++ (0) | 2022.03.07 |
백준 2212번: 센서 - 그리디 C++ (0) | 2022.03.07 |
백준 1700번 : 멀티탭 스케줄링 - 그리디 C++ (0) | 2022.03.07 |