λ°±μ€ (BOJ) 11052λ²
https://www.acmicpc.net/problem/11052
μ¬μ©μΈμ΄ : PYTHON
1.λ¬Έμ
2.νμ΄
μ΅μ ν΄(μ΅λκ°)μ ꡬνλ λ¬Έμ μ΄λ―λ‘ λ€μ΄λλ―Ή νλ‘κ·Έλλ°μ μ¬μ©νμ¬ ν μ μμλ€.
μ΅μ ν΄μ μΌλΆλΆμ΄ κ·Έ λΆλΆμ λν μ΅μ ν΄κ° DP μνμμ μΈμ°λ μΆλ°μ μμ μκ°νλ€.
Nμ΄ 4μ΄κ³ P1=1, P2=5, P3=6, P4=7μΈ κ²½μ°
μ΅λκ° = max(P4λ₯Ό μ ννμ§ μμ κ²½μ°, P4λ₯Ό μ νν κ²½μ°)μ΄λ€.
μ΄λ P4λ₯Ό μ ννλ©΄ Nμ κ°―μλ₯Ό λͺ¨λ μ±μ°κΈ° λλ¬Έμ P4νλλ§ μ΄ μ μλ€.
λ°λΌμ max{(P1,P2,P3)μ μ‘°ν©μ μ΄μ©ν΄μ 4λ₯Ό λ§λ€ μ μλ μ΅λκ°, 7}μ΄ λλ€.
μ μ΅μ ν΄μ μΌλΆλΆ (P1,P2,P3)μ μ‘°ν©μ μ΄μ©ν΄μ 4λ₯Ό λ§λ€ μ μλ μ΅λκ° = (P3λ₯Ό μ ννμ§ μλ κ²½μ°, P3λ₯Ό μ΅μ νλ μ νν κ²½μ°)μ΄λ€.
μ΄λ P3λ₯Ό μ΅μ νλ μ νν κ²½μ° N(=4)-3 = 1 μ¦ P1λ§ μ΄ μ μλ€.
λ°λΌμ max{(P1,P2)μ μ‘°ν©μ μ΄μ©ν΄μ 4λ₯Ό λ§λ€ μ μλ μ΅λκ°, 1+6}μ΄ λλ€.
μ μ΅μ ν΄μ μΌλΆλΆ (P1,P2)μ μ‘°ν©μ μ΄μ©ν΄μ 4λ₯Ό λ§λ€ μ μλ μ΅λκ° = (P2λ₯Ό μ ννμ§ μλκ²½μ°, P2λ₯Ό μ΅μ νλ μ νν κ²½μ°)μ΄λ€.
P2λ₯Ό μ ννμ§ μλκ²½μ°λ P1μ 4κ° μ¬λ κ²½μ°λ°μ μλ€.
P2λ₯Ό μ΅μ νλ μ νν κ²½μ° N(=4)-2 = 2 μ¦ (P1,P2)λ₯Ό μ΄μ©ν΄μ 2λ₯Ό λ§λ€ μ μλ μ΅λκ°μ΄ λλ€.
λ°λΌμ max{1*4, (P1,P2)λ₯Ό μ΄μ©ν΄μ 2λ₯Ό λ§λ€ μ μλ μ΅λκ°}μ΄ λλ€.
μ μ΅μ ν΄μ μΌλΆλΆ (P1,P2)μ μ‘°ν©μ μ΄μ©ν΄μ 2λ₯Ό λ§λ€ μ μλ μ΅λκ° = (P2λ₯Ό μ ννμ§ μμ κ²½μ°, P2λ₯Ό μ΅μ νλ μ νν κ²½μ°)μ΄λ€.
P2λ₯Ό μ ννμ§ μμ κ²½μ°λ P1μ 2κ°μ¬λ κ²½μ°λ°μ μλ€.
P2λ₯Ό μ΅μ νλ μ νν κ²½μ°λ P2νλλ₯Ό μ¬λ κ²½μ°λ°μ μλ€.
λ°λΌμ max{1*2, 5} κ° λλ€.
2-1.μνμμ μΈμ°κΈ°
μΉ΄λ κ°―μκ° 1κ°μΈ κ²½μ°(i=1) p1λ°μ ꡬ맀ν μ μλ€.
μ£Όμ΄μ§ μΉ΄λκ° νλλ μμΌλ©΄(j=0) μ΅λκ°μ 0μ΄λ€.
μ£Όμ΄μ§ μΉ΄λκ° 1κ°(j=1)μ΄λ©΄ μ΅λκ°μ P1 * i μ΄λ€.
κ·Έλ μ§ μμκ²½μ° μμμ μλ₯Ό λ€μ΄ μ€λͺ
ν λ°λ₯Ό μνμμΌλ‘ λνλ΄μλ€.
2-2.base caseλ‘ μλ ΄νλμ§ νμΈ
j-1, i-j λ₯Ό λ°λ³΅νλ©΄
i=1, i=0, j=1μΈ base caseλ‘ μλ ΄νκ² λλ€.
2-3.μνμμ κ³μ°
bottom-up λ°©μ(μνμμ μ€λ₯Έμͺ½μ λ±μ₯νλ κ°μ΄ μΌμͺ½μ λ±μ₯νλ κ°λ³΄λ€ λ¨Όμ κ³μ°)μΌλ‘ μ°μ°μ νλ €λ©΄ λΉ¨κ°μ νμ΄νμ κ°μ΄ νμ°μ μμλλ‘ κ³μ°νλ©΄ λλ€.
μ΄λ μνμμλ λνλμ§ μμλλ° i < j μΈκ²½μ° D(i,j) = D(i,i)κ° λλ€.
μλ₯Όλ€μ΄ D(3,5) μ¦ μΉ΄λ 3κ°λ₯Ό ꡬ맀νλλ° P1,P2,P3,P4,P5κ° μλ€λ©΄ P4μ P5λ 3κ°λ₯Ό μ΄κ³ΌνκΈ° λλ¬Έμ ꡬ맀ν μ μκ³ P1,P2,P3λ§ κ΅¬λ§€ν μ μκΈ° λλ¬Έμ΄λ€.
3.μ½λ
import sys
input = sys.stdin.readline
N=int(input())
P=list(map(int,input().split()))
P.insert(0,0)
l=[[0]*(N+1) for _ in range(N+1)]
for j in range(1,N+1):
l[1][j]=P[1]
for i in range(1,N+1):
l[i][1] = P[1]*i
for i in range(2,N+1):
for j in range(2,N+1):
if i < j:
l[i][j]=l[i][i]
else:
l[i][j] = max(l[i][j-1],l[i-j][j] + P[j])
print(l[N][N])
'πμ½λ©ν μ€νΈ:CodingTest' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ 1107λ²-νμ΄μ¬]리λͺ¨μ»¨ (0) | 2023.06.20 |
---|---|
[λ°±μ€ 11053λ²-νμ΄μ¬]κ°μ₯ κΈ΄ μ¦κ°νλ λΆλΆ μμ΄ (0) | 2023.06.20 |
[λ°±μ€ 1463λ²-νμ΄μ¬]1λ‘ λ§λ€κΈ° (0) | 2023.06.20 |
[λ°±μ€ 6588λ²-νμ΄μ¬]골λλ°νμ μΆμΈ‘ (0) | 2023.06.20 |
[λ°±μ€ 17298λ²-νμ΄μ¬]μ€ν°μ (0) | 2023.06.20 |