[BOJ 11052]購入カード(Python)
質問する
https://www.acmicpc.net/problem/11052
これはn枚のカードを購入する際、最も高い購入金額の問題です.
問題を解く
dp[i]
=1つのカードを購入したときに持つことができる金額の最大値まず,nが3未満のときに値を定義した.
dp[1] = p[1]
dp[2] = max(dp[1]*2, p[2])
nが3より大きいことから、点火式で値を求める.for i in range(3,n+1):
for j in range(1,i+1):
dp[i] = max(p[i], dp[i], dp[j] + dp[i-j])
다른 카드팩과 섞어 구매하는 것보다 단일 카드팩의 금액이 가장 비쌀 수 있다.
이미 구해진 최댓값이 다른 값으로 덮어씌워질 수 있다.
コード#コード#
import sys
input = sys.stdin.readline
n = int(input())
p = ['dummy'] + list(map(int,input().rsplit()))
# dp[i] = 카드 i개를 구매할 때 가질 수 있는 금액의 최댓값
dp = [0] * (n+1)
dp[1] = p[1]
dp[2] = max(dp[1]*2, p[2])
for i in range(3,n+1):
for j in range(1,i+1):
dp[i] = max(p[i], dp[i], dp[j] + dp[i-j])
print(dp[n])
Reference
この問題について([BOJ 11052]購入カード(Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@uoayop/BOJ-11052-카드-구매하기Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol