Study hard
swea 1486. 장훈이의 높은 선반 본문
[문제]
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
[풀이]
dfs로 조합을 구하는 방법으로 풀었다.
합이 현재까지 구해둔 최소값보다 커지면 재귀를 하지 않고 넘어가는 식으로 시간을 줄였다.
#include <iostream>
#include <algorithm>//min
using namespace std;
int T, N, B;
int H[21];
bool check[21];
int Min;
void dfs(int h, int b) {
if (b >= B) {
Min = min(Min, b);
return;
}
for (int i = h; i < N; i++) {
if (check[i] || b+H[i] >= Min)
continue;
check[i] = true;
dfs(i, b + H[i]);
check[i] = false;
}
}
void solution() {
cin >> T;
for (int t = 1; t <= T; t++) {
cin >> N >> B;
Min = 987654321;
for (int i = 0; i < N; i++) {
cin >> H[i];
}
dfs(0, 0);
cout << '#' << t << ' ' << Min - B << '\n';
}
}
int main() {
solution();
return 0;
}
'SW Expert Academy' 카테고리의 다른 글
swea 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2020.09.27 |
---|---|
swea 1219. [S/W 문제해결 기본] 4일차 - 길찾기 (0) | 2020.09.27 |
swea 1861. 정사각형 방 (0) | 2020.09.26 |
swea 1226. [S/W 문제해결 기본] 7일차 - 미로1 (0) | 2020.09.26 |
swea 1824. 혁진이의 프로그램 검증 (0) | 2020.09.25 |