반응형
문제 출처 :
https://www.acmicpc.net/problem/14501
알고리즘 분석 :
문제 해결에 필요한 사항
1. 백트래킹
백트래킹 기본 문제이다.
현재 날짜에서 현재 날짜에서 일을 시작하여 걸리는 날이 n + 1을 넘지 않으면 재귀를 돌려주고 최종적으로 return 받아낸 값을
max로 비교하여 문제를 풀면 된다. 이때 n + 1인 이유는 만약 10일째 1일이 걸린다고 하면 11일이 되지만 사실상 10일에 끝나기때문에 n + 1을 해주어야 한다.
소스 코드 :
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 32 33 34 | #include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef pair<int, int> pii; pii day[20]; int n; int dfs(int d) { if (d > n) return 0; int ret = 0; if(d + day[d].first <= n + 1) ret = max(ret, dfs(d + day[d].first) + day[d].second); ret = max(ret, dfs(d + 1)); return ret; } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d %d", &day[i].first, &day[i].second); printf("%d",dfs(1)); return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[2567번] 색종이1 (0) | 2018.04.16 |
---|---|
[14889번] 스타트와 링크 (0) | 2018.04.14 |
[3190번] 뱀 (0) | 2018.04.09 |
[14502번] 연구소 (0) | 2018.04.06 |
[1633번] 최고의 팀 만들기 (0) | 2018.04.03 |