728x90
반응형
n = int(input()) # 1<= n <= 10000

data=[0]
for i in range(n):
  data.append(int(input()))

many = [ 0 ]
many.append(data[1])
if n > 1 : 
  many.append(data[1]+data[2])

  for i in range(3,n+1):
    many.append( max(many[i-1],many[i-2]+data[i], many[i-3]+data[i-1]+data[i] ) )

print(many[n])

 

728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 1912 연속합  (0) 2020.09.11
# 2748 피보나치 수2  (0) 2020.09.11
# 2193 이친수  (0) 2020.09.11
# 1932 정수 삼각형  (0) 2020.09.11
# 2579 계단 오르기  (0) 2020.09.11
728x90
반응형
n = int(input())
# n 자리 이친수를 구하자 

data=[ [0,0] for _ in range(91)]

data[1][1]=1 # 1 
data[2][0]=1 # 10 

# 0 으로 끝나면 뒤에 2개가 올수 있고 
# 1 로 끝나면 뒤에 1개만 가능.

for i in range(3,n+1):
  data[i][0] = data[i-1][1]+data[i-1][0]
  data[i][1] = data[i-1][0]

print(data[n][0] + data[n][1])
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 2748 피보나치 수2  (0) 2020.09.11
# 2156 포도주 시식  (0) 2020.09.11
# 1932 정수 삼각형  (0) 2020.09.11
# 2579 계단 오르기  (0) 2020.09.11
# 1149 RGB 거리  (0) 2020.09.11
728x90
반응형
n = int(input()) # 1<= n <= 500

data=[]
for i in range(n):
  data.append(list(map(int, input().split())))

for i in range(n-1):
  for j in range(len(data[i+1])):
    if ( j==0 ):
      data[i+1][j] += data[i][j]
    elif ( j == len(data[i+1])-1 ):
      data[i+1][j] += data[i][-1]
    else :
      data[i+1][j] += max( data[i][j-1] , data[i][j] )

print(max(data[n-1]))
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 2156 포도주 시식  (0) 2020.09.11
# 2193 이친수  (0) 2020.09.11
# 2579 계단 오르기  (0) 2020.09.11
# 1149 RGB 거리  (0) 2020.09.11
# 11726 2xn 타일링  (0) 2020.09.11
728x90
반응형

# 초기 코드 ( 틀림 ) 

# 계단을 3번 연속 밟을 수 없다. 
# 마지막은 꼭 밟아야 한다. 
# 한번에 하나나 두개의 계단을 오른다. 

n = int(input()) # 계단의 개 수  1<= n <= 300 

data = [0]
for i in range(1,n+1):
  data.append(int(input()))

result = [0]*301

if n == 1 :
  print ( data[1])
elif n == 2 : 
  print ( data[1]+data[2])

else : 
  result[1] = data[1]
  result[2] = data[1]+data[2]

  k = 1

  for i in range(3,n-1):

    # 전에 연속으로 2번 밟은 경우 
    a = data[i-2]+data[i-1]
    # 전에 연속으로 2번 안 밝은 경우 
    b = max (data[i-2]+data[i], data[i-1]+data[i])
    result[i] = max (a,b) + result[i-3]

    if i == n-2 :
      if a> b: 
        # 만약 마지막 전전 계단을 밟았다면, 1 안 밟았다면 0 
        k = 0

  # 만약 마지막 전전꺼를 밟
  if ( k == 0 ):
    print( result[n-2]+ data[n-1]+ data[n])
  else :
    print( result[n-2]+ data[n])

 

# 정답 

n = int(input()) # 계단의 개 수  1<= n <= 300 

data = [0 for i in range(301)]
for i in range(n):
  data[i] = int(input())

result = [0 for i in range(301)]

result[0] = data[0]
result[1] = data[0]+ data[1]
result[2] = max ( data[1] , data[0]) + data[2]

# 경우의 수 
# 전 계단 안 밟는게 가장 큰 경우
# 전전 계단 안 밟는게 가장 큰 경우

for i in range(3, n):
  result[i] = max ( result[i-3] + data[i-1]+ data[i], result[i-2]+data[i])

print ( result[n-1] )

 

# 조금 더 간단하게 

n = int(input())
data = [0] 
for i in range(n): data.append(int(input()))

dp = [0, data[1]] 
if n >= 2 : dp.append(data[1]+data[2])

for i in range( 3, n+1):
  dp.append( max( dp[i-3]+data[i-1]+data[i], dp[i-2]+data[i] ))

print(dp[n])
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 2193 이친수  (0) 2020.09.11
# 1932 정수 삼각형  (0) 2020.09.11
# 1149 RGB 거리  (0) 2020.09.11
# 11726 2xn 타일링  (0) 2020.09.11
# 1003 피보나치 함수  (0) 2020.09.11
728x90
반응형

# 틀린 코드 

n = int(input()) # 2<= n <= 1000 
cost = [0]*(n+1)
for i in range(1,n+1):
  cost[i] = list(map(int,input().split()))

# 집 마다 칠하는 비용이 다름! 
id = [0 for i in range(n+1)]
id[0] = cost[1].index(max(cost[1]))

total=0
for i in range(1,n+1):
  id[i] = cost[i].index(min(cost[i]))

  if (id[i]==id[i-1]) :
    id[i] = cost[i].index( min ( cost[i][ (id[i]+1)%3 ], cost[i][ (id[i]+2)%3 ]) )
 
  total += cost[i][ id[i] ]

print(total)

 

# 정답 

n = int(input())
cost = []
for i in range(n):
    cost.append(list(map(int, input().split())))

for i in range(1, len(p)):
    cost[i][0] = min(cost[i - 1][1], cost[i - 1][2]) + cost[i][0]
    cost[i][1] = min(cost[i - 1][0], cost[i - 1][2]) + cost[i][1]
    cost[i][2] = min(cost[i - 1][0], cost[i - 1][1]) + cost[i][2]
    
print(min(cost[n - 1][0], cost[n - 1][1], cost[n - 1][2]))
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 1932 정수 삼각형  (0) 2020.09.11
# 2579 계단 오르기  (0) 2020.09.11
# 11726 2xn 타일링  (0) 2020.09.11
# 1003 피보나치 함수  (0) 2020.09.11
# 1463 1로 만들기  (0) 2020.09.11
728x90
반응형
n = int(input()) # 1<= n <= 1000

tile = [0]*1001

tile[1]=1
tile[2]=2

if n>2:
  for i in range(3,n+1):
    tile[i]=tile[i-1]+tile[i-2]

print (tile[n]%10007)
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 2579 계단 오르기  (0) 2020.09.11
# 1149 RGB 거리  (0) 2020.09.11
# 1003 피보나치 함수  (0) 2020.09.11
# 1463 1로 만들기  (0) 2020.09.11
# 9507 Generations of Tribbles  (0) 2020.09.11
728x90
반응형
t = int(input())

n = [] 
for i in range(t):
  n.append(int(input()))


def fibo(n):
  if ( n == 0 ) : 
    return [1, 0]
  if ( n == 1 ) :
    return [0, 1]
  
  zero = [0] * (n+1) 
  one  = [0] * (n+1)

  zero[0] = 1 ; zero[1] = 0
  one[0] = 0 ; one[1] = 1

  for i in range(2,n+1):
    zero[i]=zero[i-1]+zero[i-2]
    one[i]=one[i-1]+one[i-2]

  return [zero[n],one[n]]

for i in n : 
  a = fibo(i)
  for i in a:
    print(i,end=' ')
  print()
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 1149 RGB 거리  (0) 2020.09.11
# 11726 2xn 타일링  (0) 2020.09.11
# 1463 1로 만들기  (0) 2020.09.11
# 9507 Generations of Tribbles  (0) 2020.09.11
# 9095 1,2,3 더하기  (0) 2020.09.11
728x90
반응형
n = int(input())

data = [0]*(n+1) 

if n >= 2 :
  data[2]=1
  for i in range(3,n+1):
    data[i] = data[i-1]+1
    if i % 3 == 0 :
      data[i] = min (data[i], data[i//3]+1)
    if i % 2 == 0:
      data[i] = min ( data[i], data[i//2]+1)
print ( data[n])
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 11726 2xn 타일링  (0) 2020.09.11
# 1003 피보나치 함수  (0) 2020.09.11
# 9507 Generations of Tribbles  (0) 2020.09.11
# 9095 1,2,3 더하기  (0) 2020.09.11
# 10825 국영수  (0) 2020.09.09
728x90
반응형
t = int(input()) # 0<t<69 

data = []
for i in range(t):
  data.append(int(input()))

cnt = [1,1,2,4,8]

for i in range(5,68):
  cnt.append(cnt[i-1]+cnt[i-2]+cnt[i-3]+cnt[i-4])

for i in data:
  print(cnt[i])
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 11726 2xn 타일링  (0) 2020.09.11
# 1003 피보나치 함수  (0) 2020.09.11
# 1463 1로 만들기  (0) 2020.09.11
# 9095 1,2,3 더하기  (0) 2020.09.11
# 10825 국영수  (0) 2020.09.09
728x90
반응형
t = int(input())  
data=[]
for i in range(t):
  data.append(int(input()))

cnt = [0,1,2,4]

for i in range(4,11):
  cnt.append(cnt[i-1]+cnt[i-2]+cnt[i-3])

for i in data:
  print(cnt[i])
728x90
반응형

'백준 > 다이나믹 프로그래밍' 카테고리의 다른 글

# 11726 2xn 타일링  (0) 2020.09.11
# 1003 피보나치 함수  (0) 2020.09.11
# 1463 1로 만들기  (0) 2020.09.11
# 9507 Generations of Tribbles  (0) 2020.09.11
# 10825 국영수  (0) 2020.09.09

+ Recent posts