[PS]Baek Jun 9465シール
7974 ワード
質問する
BJ 9465シール
質問分類:DP
質問難易度:シルバー1
問題コード
import sys
from collections import deque
import itertools
import heapq
sys.setrecursionlimit(10**7)
input = sys.stdin.readline
k = int(input())
ans = []
for kk in range(k):
n = int(input())
g = [list(map(int, input().split())) for _ in range(2)]
dp = [item[:] for item in g]
if n != 1:
dp[0][1] += g[1][0]
dp[1][1] += g[0][0]
for i in range(2, n):
dp[0][i] += max(dp[1][i-2], dp[1][i-1])
dp[1][i] += max(dp[0][i-2], dp[0][i-1])
ans.append(max(dp[0][n-1],dp[1][n-1]))
print(*ans, sep = '\n')
問題の復記&感じ
注意:典型的なDP問題は、適切な順序で並べ替えられる.
以前に解いた問題のようにcaseを適切に区分し,特定の時点の最大値に保存する.以前の問題と解決できる差は少ないと思っていたので、点火式を誘導するためにいろいろ試してみましたが、思いつきませんでした.
重要なのは,問題制限に違反しない場合に,特定の時点の最大値の感覚を有機的に導出できることである.
Reference
この問題について([PS]Baek Jun 9465シール), 我々は、より多くの情報をここで見つけました https://velog.io/@jsb100800/algoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol