βοΈ λ¬Έμ
[λ°±μ€/BOJ] 11055λ²: κ°μ₯ ν° μ¦κ°νλ λΆλΆ μμ΄(https://www.acmicpc.net/problem/11055)
μμ΄ Aκ° μ£Όμ΄μ‘μ λ, κ·Έ μμ΄μ μ¦κ°νλ λΆλΆ μμ΄ μ€μμ ν©μ΄ κ°μ₯ ν° κ²μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μλ₯Ό λ€μ΄, μμ΄ A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} μΈ κ²½μ°μ ν©μ΄ κ°μ₯ ν° μ¦κ°νλ λΆλΆ μμ΄μ A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} μ΄κ³ , ν©μ 113μ΄λ€.
π€ μ μΆλ ₯ μμ
π§ λμ΄λ/μμ μκ°
β λμ΄λ: solved.ac κΈ°μ€ S2
β μμ μκ°: μΈ‘μ X
β κΆμ₯ μκ°: 1μκ° 15λΆ
π‘ νμ΄
1) λ¬Έμ μ΄ν΄
μ΄μ νμλ κ°μ₯ κΈ΄ κ°μνλ λΆλΆ μμ΄ λ¬Έμ μ μ μ¬ν λ¬Έμ λ€. μ΅μ’ μ λ΅ μ½λκ° μ΄μ μ΄ μ½λλ ν¬κ² μ°¨μ΄λλ 건 μλμ§λ§ νμ΄ λ°©λ²μ μ 리ν΄λ³΄λ €κ³ νλ€.
2) μμ΄λμ΄ νλ¦ λ° μ½λ
β DP ν μ΄λΈ μ μ λ° μ΄κΈ°κ° μ±μ°κΈ°
N = int(input())
A = list(map(int, input().split()))
DP = A.copy()
- DP = A.copy()
- DP ν μ΄λΈμ κ° μΈλ±μ€λ ' λ₯Ό λ§μ§λ§ μμλ‘ νλ κ°μ₯ ν° μ¦κ°νλ λΆλΆ μμ΄μ ν©'μ μλ―Ένλ€.
- μ¦κ°νλ λΆλΆμ΄ ν κ΅°λ°λ μλ κ²½μ°κ° μμ μ μκΈ° λλ¬Έμ DP ν μ΄λΈμ μ΄κΈ° μνλ Aμ λμΌνλ€.
β‘ μ νμ μ λ
for i in range(N):
for j in range(i):
if A[i] > A[j] and A[i]+DP[j] > DP[i]:
DP[i] = A[i]+DP[j]
- A[i] > A[j]
- A[j]λ A[i] μ΄μ κ°μ μλ―Ένκ³ μ¦κ°νλ λΆλΆ μμ΄ ννλ₯Ό λ§μΆ°μ£ΌκΈ° μν΄ μ΄ μ‘°κ±΄μ΄ νμνλ€.
- A[i]+DP[j] > DP[i]
- λ₯Ό λ§μ§λ§μΌλ‘ νλ λΆλΆ μμ΄μ DP[j]λ₯Ό μΆκ°νμ λμ ν©μ΄ κΈ°μ‘΄ DP[i]λ³΄λ€ ν°μ§ νμΈνλ 쑰건μ΄λ€.
3) μ 체 μ½λ
N = int(input())
A = list(map(int, input().split()))
DP = A.copy()
for i in range(N):
for j in range(i):
if A[i] > A[j] and A[i]+DP[j] > DP[i]:
DP[i] = A[i]+DP[j]
print(max(DP))
4) μ΄λ €μ λ μ /λ°°μ΄ μ
π¨ μ΄λ €μ λ μ
- TILμλ κ΅μ₯ν κΈλ°© νΌ κ²μ²λΌ μ 리ν΄λμ§λ§ A[i]+DP[j] > DP[i]λ₯Ό λμ΄λ΄λ λ°μ κ½€λ μ€λ μκ°μ΄ κ±Έλ Έλ€.
- νλ¦°νΈλ¬ΈμΌλ‘ μ€κ° κ° μ°μ΄κ°λ©΄μ νμ°Έ λ³΄κ³ μλ μ€μ μ°μ°ν μ 쑰건μ λ°κ²¬νκ² λ¨
β λ°°μ΄ μ
- μ΄μ DP ν μ΄λΈμ μ΄λ»κ² μ μν΄μΌ ν μ§κ° μμ£Ό μ½κ°μ λμ 보μ΄λ κ² κ°λ€.