2022. 1. 23. 16:22ใ๐ฑ Algorithm/DP
https://www.acmicpc.net/problem/11055
์ ๋ต ์ฝ๋
from sys import stdin
read = stdin.readline
N = int(read())
arr = list(map(int, read().split()))
dp = [0] * N
dp[0] = arr[0]
for i in range(1, N):
dp[i] = arr[i]
for j in range(i):
if arr[j] < arr[i]:
dp[i] = max(dp[i], dp[j] + arr[i])
print(max(dp))
๋ค๋ฅธ ์ ๋ต ์ฝ๋ (์๋ ๋น ๋ฆ)
์ด๋ฐ ์์ ํ์ด๊ฐ ๊ฝค ๋ณด์ด๋๋ฐ ์ ์ด์ dp ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ 1001 (N ์ต๋ ํฌ๊ธฐ)์ผ๋ก ์ก๊ณ ์์ํ๋ค.
import sys
input = sys.stdin.readline
n = int(input())
dp = [0] * 1001
max_num = 0
data = list(map(int, input().split()))
for i in data:
dp[i] = i
dp[i] += max(dp[:i])
print(max(dp))
์ ๋ ฅ์ผ๋ก ๋ฐ์ ๊ฐ์ด ์ ์ฅ๋ data ์ ๊ฐ ์์๋ค์ dp ์ ํ ๋น ํ๋ค. 0๋ฒ ์ธ๋ฑ์ค๋ถํฐ ์์ฐจ์ ์ผ๋ก ์๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ๊ฐ์ ํฌ๊ธฐ๋ฅผ ์ธ๋ฑ์ค๋ก ์ก์์ dp ๋ฐฐ์ด์ ํ ๋นํ๋ค (ex i = 100 ์ด๋ฉด, dp[100] = 100 )
๊ทธ๋ฆฌ๊ณ ํด๋น dp[i] ์ ๊ฐ์ dp[:i] ์ ๊ฐ์ค ๊ฐ์ฅ ํฐ ๊ฒ์ ๊ณจ๋ผ ๋ํ์ฌ dp[i] ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ๊ตณ์ด ์ฆ๊ฐํ๋ ์์ด์ธ์ง ๊ฒ์ฌํ ํ์๊ฐ ์์ด์ง๋ค. ๊ทธ๋ก ์ธํด ์ด์ค for ๋ฌธ๋ ์์จ ์ ์์ด ๋ ๋น ๋ฅธ ์ฐ์ฐ ์๋๋ฅผ ๋ผ ์ ์๋ค.
'๐ฑ Algorithm > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 10844 ํ์ด์ฌ (0) | 2022.01.29 |
---|---|
๋ฐฑ์ค 1912 ํ์ด์ฌ (0) | 2022.01.20 |
๋ฐฑ์ค 11053 ํ์ด์ฌ (0) | 2022.01.18 |
๋ฐฑ์ค 12852 ํ์ด์ฌ (1) | 2022.01.12 |
๋ฐฑ์ค 2293 ํ์ด์ฌ (0) | 2022.01.09 |