[BOJ] 9465

DP인 것만 알겠고 나머진 다 모르겠다.
문제

me

import sys
input = sys.stdin.readline

T= int(input())

for _ in range(T):
    n = int(input())
    stickers=[list(map(int,input().split())) for _ in range(2)]
    flag=-1 # 아직 flag 세우지 못함
    sums=[[0]*n for _ in range(2)]
    for i in range(n):
        # flag는 항상 앞으로 더할 flag
        # 다른 flag가 클 때
        noFlagSum=0
        sums[0][i]=sums[1][i-1]+stickers[0][i]
        sums[1][i]=sums[0][i-1]+stickers[1][i]
        if sums[0][i] > sums[1][i]: flag=1
        elif sums[0][i] < sums[1][i]: flag=0
        if i>1: # 2부터
            max_before= max(sums[0][i - 2], sums[1][i - 2])
            max_now = max(stickers[0][i],stickers[1][i])
            print(i,max_before,max_now)
            if sums[(flag+1)%2][i] <= max_before+max_now:
                # 현재 최대 값 <= 그 이전 것 + 현재 값 (이전은 선택하지 않는)
                for j in range(2):
                    sums[j][i] = max_before+max_now
                flag = -1
    for s in sums: print(s)
    print(max(sums[0][-1],sums[1][-1]))

택도 없다..
어디서 틀렸는지 조차 감이 안잡힌다...
내일 다시 봐야지 알 것 같다. 흑흑

others

출처

t = int(input())
for i in range(t):
  s = []
  n = int(input())
  for k in range(2):
    s.append(list(map(int, input().split())))
  for j in range(1, n):
    if j == 1:
      s[0][j] += s[1][j - 1]
      s[1][j] += s[0][j - 1]
    else:
      s[0][j] += max(s[1][j - 1], s[1][j - 2])
      s[1][j] += max(s[0][j - 1], s[0][j - 2])
  print(max(s[0][n - 1], s[1][n - 1]))

전 값과 그 이전 값의 최대 값 중에 더하기..
선택할 수 있는 것 중 최대 값
선택할 수 있는 것 : 대각선 값, 그 옆 값

좋은 웹페이지 즐겨찾기