๋ฐฑ์ค€ 11055 ํŒŒ์ด์ฌ

2022. 1. 23. 16:22ใ†๐Ÿ”ฑ Algorithm/DP

https://www.acmicpc.net/problem/11055

 

11055๋ฒˆ: ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ˆ˜์—ด์˜ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘์—์„œ ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} ์ธ ๊ฒฝ์šฐ์— ํ•ฉ์ด ๊ฐ€์žฅ ํฐ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜

www.acmicpc.net

 

์ •๋‹ต ์ฝ”๋“œ 

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