-문제:https://www.acmicpc.net/problem/9465

 

처음에 bfs로 풀어야하나 싶었는데 이걸로 풀면 안되는게 

상,하,좌,우의 값을 확인하는 것이 아니라 이것들을 빼고 진행하는 거라서 탐색으로 진행하면 안된다 

 

인덱스에 따라서 더할 수 있는 값들 중 최댓값을 더해가다가 마지막 열의 두 값 중 더 큰 값을 출력하면 된다 

아직 스스로 푼건 아니지만, 다이나믹 프로그래밍 문제를 풀면서 느낀게 값을 누적하고, 최댓값을 적용해야하는 상황을 잘 판단해야지 문제를 잘 풀 수 있겠다 라는 생각을 한다

 

-정답풀이 

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

'백준 > DP' 카테고리의 다른 글

[dp/백준] 11057번: 오르막 수  (0) 2022.06.07
[dp/백준] 9251번: LCS  (0) 2022.06.07
[dp/백준] 14501번: 퇴사  (0) 2022.06.06
[dp/백준] 9461번: 파도반 수열  (0) 2022.06.06
[dp/백준] 1904번: 01타일  (0) 2022.06.05

+ Recent posts