알고리즘

[백준, 14501번] 퇴사

hminor 2023. 7. 27. 12:29
# Bottom Up 방식의 dp 풀이
# 하나씩 접근하면서 모든 과정을 거쳐야하기에 dp를 사용했다는 점!
import sys 
input = sys.stdin.readline
n = int(input())
li = [list(map(int,input().split())) for _ in range(n)]
dp = [0]*(n+1)

for i in range(n):
    for j in range(i+li[i][0], n+1):
        if dp[j] < dp[i]+li[i][1]: dp[j] = dp[i]+li[i][1]
print(dp[-1])
# Top Down
import sys 
input = sys.stdin.readline
n = int(input())
li = [list(map(int,input().split())) for _ in range(n)]
dp = [0]*(n+1)

for i in range(n-1,-1,-1):
    if i+li[i][0] > n: dp[i] = dp[i+1]
    else: dp[i] = max(dp[i+1], li[i][1]+dp[i+li[i][0]])
print(dp[0])
# 그리디 알고리즘으로 당장 보이는 부분부터 해보려 했지만
# 결국 해답을 찾기가 쉽지 않았다.
# !틀린 코드!
import sys
input = sys.stdin.readline
n = int(input())
start = hap = 0
li = [ list(map(int,input().split())) for _ in range(n)]
result = [li[0]]
while start <= n-1:
    t,p = result[-1]
    for i in range(start+1,start+t):
        if t > li[i][0] and p < li[i][1]: t,p = li[i][0], li[i][1]
    result[-1] = [t,p]
    start += t
    hap += p
    if start >= n or start+li[start][0] > n: break
    else: result.append(li[start])
print(hap)
 

'알고리즘' 카테고리의 다른 글

[백준, 2501번] 약수 구하기  (0) 2023.07.28
[백준, 14502번] 연구소  (0) 2023.07.28
[백준, 2309번] 일곱 난쟁이  (0) 2023.07.27
[백준] 셀프 넘버  (0) 2023.07.26
[백준, 1182번] 부분수열의 합  (0) 2023.07.26