Open robert-min opened 7 months ago
"""
Return : n을 1, 2, 3의 합으로 나타내는 방법의 수
- i를 나타내는 방법의 수
- 1 : 1
- 2 : 1+1, 2
- 3 : 1+2, 1+1+1, 2+1. 3
- 4 : 1+1+2, 2+2, 1+2+1, 1+1+1+1, 2+1, 3+1, 1+3
- dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
"""
import sys
input = sys.stdin.readline
dp = [0] * 11
dp[1] = 1
dp[2] = 2
dp[3] = 4
for _ in range(int(input())):
case = int(input())
if not dp[case]:
for i in range(4, case+1):
dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
print(dp[case])
"""
Return : 마지막 계단을 밟았을 때, 얻을 수 있는 총 점수의 최댓값
- dp[i]는 i 번째 계단을 밟았을 때 총 점수 최대값을 저장
- i 번째 계단을 밟는다는 것은 i-1 or i-2 계단을 밟았음
- i-1 계단에서 올라오는 경우
- score[i-1] + score[i] + dp[i-3]
- dp[i-2] 는 못올라가기 때문
- i-2 계단에서 올라오는 경우
- score[i] + dp[i-2]
"""
import sys
input = sys.stdin.readline
N = int(input())
stair = [0] + [int(input()) for i in range(1, N + 1)]
if N < 2:
print(stair[N])
else:
dp = [0] * (N+1)
dp[1] = stair[1]
dp[2] = dp[1] + stair[2]
for i in range(3, N+1):
dp[i] = max(dp[i-2], dp[i-3] + stair[i-1]) + stair[i]
print(dp[i])
"""
Return : 모든 집을 칠하는 비용의 최솟값
- 빨강, 초록, 파랑 비용
1번집 빨강
2번집 파랑 or 초록
3번집 초록 or 파랑
마지막 집을 칠하는 경우의 수 [N][0], ...
마지막 색이 빨강이면 그 전 파랑-초록 or 초록-파랑 비용의 합
누적된 값
"""
import sys
input = sys.stdin.readline
N = int(input())
rgb = []
for i in range(N):
rgb.append(list(map(int, input().split())))
# print(rgb)
for i in range(1, N):
rgb[i][0] = min(rgb[i-1][1], rgb[i-1][2]) + rgb[i][0]
rgb[i][1] = min(rgb[i-1][0], rgb[i-1][2]) + rgb[i][1]
rgb[i][2] = min(rgb[i-1][0], rgb[i-1][1]) + rgb[i][2]
print(min(rgb[N-1]))
1로 만들기 링크