250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준#boj#16932#모양만들기
- 백준#BOJ#1939#중량제한
- 백준#BOJ#2615#오목
- 백준#boj#12755
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#8012#한동이는영업사원
- 백준#BOJ#14501#퇴사#브루트포스
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[boj : 20167]꿈틀꿈틀 호석 애벌래-기능성 본문
문제 : 애벌래는 연속적으로 먹이를 먹을 수 있음. 먹은 먹이들의 합이 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 |