반응형
코드
h,y = map(int,input().split())
dp = [0 for _ in range(y+1)]
dp[0] = h
for i in range(1,y+1):
if i >= 5:
dp[i] = int(max(dp[i-1]*1.05, dp[i-3]*1.2, dp[i-5]*1.35))
elif i >= 3:
dp[i] = int(max(dp[i-1]*1.05, dp[i-3]*1.2))
else:
dp[i] = int(dp[i-1]*1.05)
print(dp[y])
설명
dynamic programming을 이용해서 해당 년도에 얻을 수 있는 최댓값을 계속 추가해나갔다.
i가 5 이상이면 (1년 전 최댓값 * 1.05), (3년 전 최댓값 * 1.2), (5년 전 최댓값 * 1.35) 중 최댓값을 dp[i]로 정해준다.
i가 3이상 5 미만이면 (1년 전 최댓값 * 1.05), (3년 전 최댓값 * 1.2) 중 최댓값을 dp[i]로 정해주고
3보다 작으면 (1년 전 최댓값 * 1.05)를 dp[i] 값으로 정해준다.
반응형
'알고리즘 > dynamic programming' 카테고리의 다른 글
[백준][Python] 11048번 이동하기 (0) | 2022.12.06 |
---|---|
[백준][Python] 11057번 오르막 수 (0) | 2022.12.05 |
[백준][Python] 10844번 쉬운 계단 수 (0) | 2022.06.20 |
[백준][Python] 11660번 구간 합 구하기 5 (0) | 2022.06.20 |
[백준][Python] 2294번 동전 2 (0) | 2022.05.24 |
댓글