호빵이의 알고리즘
[14501번] 퇴사 본문
#include#include using namespace std; int N, ret; int T[16], P[16]; int next_day, total = 0; void solve(int day, int sum) { if (day == N+1) { ret = max(ret, sum); return; } next_day = day + T[day]; total = sum + P[day]; if (next_day <= N+1)//여기서도 계속 돌고 solve(next_day, total); if (day + 1 <= N+1) //여기서도 계속 돌고 결국엔 가장 큰 값!!! solve(day + 1, sum); } int main() { cin >> N; for (int i = 1; i <= N; i++) cin >> T[i] >> P[i]; solve(1, 0); cout << ret; }
스터디 숙제로 푼 문제 !
되게 간단한 문제라고 생각했는데 return을 해주는 게 너무 미숙해서 시간이 오래걸렸다..ㅠㅠ 재귀함수 짜는 것은 앞으로도 계속 연습을 해봐야될 것 같다. 이번 문제에서는 N이 작기 때문에 DFS방법을 선택했다(완전탐색).
day=1부터 시작해서 두개의 if 문으로 첫 번째에서는 계속 T[day]를 더해가며 쭉 total 값을 구하도록 하였고 그 다음 if문에서는 1,2,3~N일까지
모두 탐색할 수 있게 해주었다!! 생각해내기가 어려웠지만 나중에 적응이 된다면 쉽게 풀 수 있을 것 같다!
'알고리즘 > BOJ' 카테고리의 다른 글
[삼성SW테스트] 드래곤 커브 (0) | 2018.08.06 |
---|---|
[1931번] 회의실배정 (0) | 2018.07.30 |
[2331번] 반복수열 (0) | 2018.07.30 |
[10825] 국영수 (0) | 2018.07.30 |
[1992번] 쿼드트리 (0) | 2018.07.26 |