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
- 면접복기
- 마크다운
- 문제풀이
- Markdown
- 이진탐색
- GC
- 브루트포스
- github
- Stack
- 구현
- 백준
- 배열 돌리기1
- GarbageCollector
- deque
- 그리디
- g1gc
- BFS
- 빌더패턴
- 몬티홀
- 프로세스
- Greedy
- Python
- 그래프탐색
- 정수론
- 분할정복
- 회고
- springboot
- 그래프 탐색
- 적정 스레드
- DP
Archives
- Today
- Total
FeelingXD
[백준-14501] 퇴사 👀 본문
❓ Problem
🤔 How
- 역순으로 dp테이블을 구성한다.
- 첫날부터 탐색할경우 일하는경우 하지않는경우 모두 탐색하기에 dp테이블로 일반화하기에는 어려움이있다. dp[i] 는 i 일부터의 최대값 으로 dp테이블을 만들어준다.
- dp 테이블의 갱신
- 테이블은 다음과같이 갱신된다
일을할수 있는경우
- dp[i] =max(dp[i+d]+v,dp[i+1]) dp[i+d]+v 오늘일할경우 오늘일의 가치와 오늘일이 끝난이후의 최대값과 더해준 결과가 dp[i+1] 다음날 최대값과 비교해서 최대값을 갱신해준다.
일을 할수없는경우 다음날의 최대값 과 같다.
- dp[i]=dp[i+1]
❗ Solve
#퇴사
import sys
input = sys.stdin.readline
if __name__ == "__main__":
work_list=[]
for _ in range(n:=int(input())):
work_list.append(tuple(map(int,input().split())))
dp=[0]*(n+1)
for i in range(n-1,-1,-1):
d,v=work_list[i] # d 수행일수, v 가치
if d+i<=n: # dp 의 인덱스를 넘으면안됨
dp[i]=max(dp[i+d]+v,dp[i+1]) # i의최대값은 n-1 부터시작 이전까지의 최대값이거나
continue
else:
dp[i]=dp[i+1]
print(dp[0])
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[백준-2240] 자두나무 🍒 (0) | 2024.01.12 |
---|---|
[백준-1107] 리모컨 ✨ (0) | 2024.01.11 |
[백준 - 14940] 쉬운 최단거리 🐢 (0) | 2024.01.02 |
[백준 - 2293] 동전 1 🟡 (0) | 2024.01.01 |
[백준- 2343] 기타레슨 🎸 (0) | 2023.12.31 |