<문제>
<Code>
//21735] 눈덩이 굴리기
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, res;
int map[101];
void DFS(int l, int val, int mv){ //level, value, move(m만큼)
if(l==m){ //시간되면 눈덩이 크기 비교해서 최댓값 저장
res=max(res, val);
return;
}else{
//굴리고(+1) 그대로 더하거나, 던지고(+2) 절반 깎은다음 더하거나
DFS(l+1, val+map[mv+1], mv+1);
DFS(l+1, val/2+map[mv+2], mv+2);
}
}
int main() {
freopen("input.txt","rt", stdin);
scanf("%d %d", &n, &m);
for(int i=1; i<=n; i++){
scanf("%d", &map[i]);
}
DFS(0, 1, 0); //time, value, move(m만큼)
printf("%d", res);
return 0;
}
<Comment>
다른 블로그를 보니 DP로도 푼 사람이 있다고 하던데 DP고 뭐고 무조건 DFS라는 생각밖에 안들었다.
간단하게 상태탐색트리 그림 그렸고,
level, value(눈덩이 크기), move(굴리는지/던지는지) 이렇게 3가지를 인자로 넘기는 이름 그대로의 DFS함수로 풀었다.
https://www.acmicpc.net/problem/21735
21735번: 눈덩이 굴리기
눈송이들이 많은 동네인 숙명여대 앞마당에서 눈사람 만들기 대회를 연다. 앞마당의 길이는 $N$이고 위치 $1$부터 위치 $N$ 까지만 눈이 쌓여있다. 위치 $i$에 눈이 $a_i$만큼 쌓여있다. 대회 규칙은
www.acmicpc.net
'Problem Solving > 백준' 카테고리의 다른 글
[백준-20362] 유니대전 퀴즈쇼 (0) | 2021.08.05 |
---|---|
[백준-20551] Sort 마스터 배지훈의 후계자 (0) | 2021.07.30 |
[백준-21736] 헌내기는 친구가 필요해 (0) | 2021.07.30 |
[백준-21968] 선린의 터를 (0) | 2021.07.25 |
[백준-22114] 창영이와 점프 (0) | 2021.07.25 |