728x90
문제 링크
푸는 방법
DP를 이용해 해당 년도에 얻을 수 있는 최대값을 구하면 됩니다.
점화식은 다음과 같습니다.
dp[i] = max(dp[i-1]*1.05, dp[i-3]*1.2, dp[i-5]*1.35)
만약 10000원과 6년이 주어졌다고 하면,
1년 뒤에 얻을 수 있는 최대 금액은
dp[1] = dp[0] *1.05 = 10,000 * 1.05=10,500,
2년 뒤에 얻을 수 있는 금액은
dp[2] = dp[1] * 1.05 = 10,500 *1.05=11,025,
3년 뒤에 얻을 수 있는 금액은
dp[3] = max(dp[2] * 1.05 , dp[0] * 1.2) = max(11,025 * 1.05, 10000*1.2) = max (11,576, 12,000) = 12000
4년 뒤에 얻을 수 있는 금액은
dp[4] = max(dp[3] * 1.05 , dp[1] * 1.2) = max(12000* 1.05, 10500*1.2) = max(12,600, 12,600) = 12600
5년 뒤에 얻을 수 있는 금액은
dp[5] = max(dp[4] * 1.05, dp[2] * 1.2 , dp[0] * 1.35) = max(12600* 1.05, 11,025*1.2, 10,000* 1.35)
= max(13,230, 13,230, 13,500 ) = 13500
이런 식으로 진행되서, 최대값은 13500원이 나오게 됩니다.
코드
h, y = map(int, input().split())
dp = [0 for i in range(y+1)]
dp[0]=h
for i in range(1, y+1):
if i>=5:
dp[i] = max(dp[i-1]*1.05, dp[i-3]*1.2, dp[i-5]*1.35)
elif i>=3:
dp[i] = max(dp[i - 1] * 1.05, dp[i - 3] * 1.2)
else:
dp[i] = dp[i - 1] * 1.05
dp[i] = int(dp[i])
print(int(dp[y]))
728x90
'Programming Language > 알고리즘 공부' 카테고리의 다른 글
[DP] Knapsack Problem (0) | 2021.04.21 |
---|---|
[백준] 11057 오르막 수 파이썬 (0) | 2021.04.14 |
[백준] 1932 정수 삼각형 파이썬 (0) | 2021.04.05 |
[백준] 19621 회의실 배정 2 파이썬 (0) | 2021.04.04 |
[백준] 14502 연구소 파이썬 (0) | 2021.03.29 |