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
- 장고
- Ajax
- 인스타
- 색종이 붙이기
- 인스타그램
- 재귀
- 구슬탈출2
- 알고리즘
- 1182
- 댓글
- 다리 만들기2
- 16637
- 따라하기
- 14888
- 6603
- Java
- 14502
- 17143
- 17144
- 좋아요
- 17136
- 괄호추가하기
- 로또
- 17472
- 연산자 끼워넣기
- 미세먼지 안녕!
- 9095
- 부분수열의 합
- django
- 백준
Archives
- Today
- Total
Be a developer
백준 14501 퇴사 본문
앞선 문제들을 풀었다면 쉽게 풀 수 있는 문제이다.
마찬가지로 현재 날짜를 선택하는 경우와 선택하지 않는 경우로 나눠서 풀면된다.
N+1일을 넘어가지 않도록 하는 것이 중요하다.(딱 N+1일에 끝나도록 한다.)
답이 될 수 있는 경우에 return을 하는 것을 매번 까먹는다.
까먹지 않도록 주의
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 35 36 37 38 39 40 | #include <iostream> #include <algorithm> #include <vector> using namespace std; int n; int ans; void solve(int idx, int sum, vector<int> t, vector<int> p) { //N+1일을 넘어가면 안되므로 return if (idx > n)return; //N+1일이면 max값과 비교한다. if (idx == n) { ans = max(ans, sum); //return하는거 까먹지 말자 맨날 까먹는다.. return; } //N+1일에 도달하지 않았으면 계속 진행 //현재 날짜를 선택한다. solve(idx + t[idx], sum + p[idx], t, p); //현재 날짜를 선택하지 않으면 다음 날로 간다. solve(idx + 1, sum, t, p); } int main(int argc, char** argv) { cin >> n; vector<int> t(n); vector<int> p(n); for (int i = 0; i < n; i++) { cin >> t[i] >> p[i]; } solve(0, 0, t, p); printf("%d\n", ans); return 0; } | cs |
'알고리즘' 카테고리의 다른 글
백준 15658 연산자 끼워넣기 (2) (0) | 2019.04.04 |
---|---|
백준 14888 연산자 끼워넣기 (재귀) (0) | 2019.04.04 |
백준 1182 부분수열의 합 (0) | 2019.04.03 |
백준 6603 로또 (재귀) (0) | 2019.04.03 |
백준 1759 암호 만들기 (0) | 2019.04.02 |
Comments