순간을 성실히, 화려함보단 꾸준함을

[boj : 20167]꿈틀꿈틀 호석 애벌래-기능성 본문

알고리즘,SQL/백준,BOJ

[boj : 20167]꿈틀꿈틀 호석 애벌래-기능성

폭발토끼 2020. 12. 14. 15:55

www.acmicpc.net/problem/20167

 

20167번: 꿈틀꿈틀 호석 애벌레 - 기능성

꿈틀꿈틀 호석 애벌레는 N 개의 먹이가 일렬로 나열된 나뭇가지를 오른쪽으로 기어가려고 한다. 시작하는 순간의 호석 애벌레가 0의 위치에 있고 i 번째 먹이는 오른쪽으로 i 초 기어가야 도달할

www.acmicpc.net

문제 : 애벌래는 연속적으로 먹이를 먹을 수 있음. 먹은 먹이들의 합이 k 이상일때 k를 초과한 부분을 축적함. 그리고 다시 0부터 시작. 이때 축적된 양이 최대값이 되게끔 구해라.

 

해설 : n의 범위가 20밖에 안되는걸 보면 모든 경우의 수를 해도 2^20 이니 충분하죠.

그래서 재귀로 싹다 돌렸습니다.

 

#include<bits/stdc++.h>

using namespace std;

int n, k,ans=0;
int arr[20],v[20];

void dfs(int depth, int sum, int prev);

int main()
{
	cin >> n >> k;
	for (int i = 0; i < n; i++)
		cin >> arr[i];
	dfs(0,0,0);
	cout << ans;
	return 0;
}
void dfs(int depth, int sum, int prev)
{
	if (depth == n) {
		ans = max(ans, sum);
		return;
	}

	v[depth] = 1;
	prev += arr[depth];
	if (prev >= k) dfs(depth + 1, sum + (prev - k), 0);
	else dfs(depth + 1, sum, prev);
	

	v[depth] = 0;
	dfs(depth + 1,sum,0);
}

'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글

[boj : 2688] 줄어들지 않아  (0) 2020.12.14
[boj : 3495]아스키 도형  (0) 2020.12.14
[boj : 2666] 벽장문의 이동  (0) 2020.12.03
[boj : 20292] 컨설팅  (0) 2020.12.03
[boj : 2459] 철사 자르기  (0) 2020.11.23