๐ข ์ฐ์ํฉ 2
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
38828KB
6168ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
"""
[13398] ์ฐ์ํฉ 2
๐ ๋ฌธ์
n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์์ ์์ด์ด ์ฃผ์ด์ง๋ค.
์ฐ๋ฆฌ๋ ์ด ์ค ์ฐ์๋ ๋ช ๊ฐ์ ์๋ฅผ ์ ํํด์ ๊ตฌํ ์ ์๋ ํฉ ์ค ๊ฐ์ฅ ํฐ ํฉ์ ๊ตฌํ๋ ค๊ณ ํ๋ค.
๋จ, ์๋ ํ ๊ฐ ์ด์ ์ ํํด์ผ ํ๋ค. ๋, ์์ด์์ ์๋ฅผ ํ๋ ์ ๊ฑฐํ ์ ์๋ค. (์ ๊ฑฐํ์ง ์์๋ ๋๋ค)
์๋ฅผ ๋ค์ด์ 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 ์ด๋ผ๋ ์์ด์ด ์ฃผ์ด์ก๋ค๊ณ ํ์.
์ฌ๊ธฐ์ ์๋ฅผ ์ ๊ฑฐํ์ง ์์์ ๋์ ์ ๋ต์ 12+21์ธ 33์ด ์ ๋ต์ด ๋๋ค.
๋ง์ฝ, -35๋ฅผ ์ ๊ฑฐํ๋ค๋ฉด, ์์ด์ 10, -4, 3, 1, 5, 6, 12, 21, -1์ด ๋๊ณ ,
์ฌ๊ธฐ์ ์ ๋ต์ 10-4+3+1+5+6+12+21์ธ 54๊ฐ ๋๋ค.
๐ ์
๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ n(1 โค n โค 100,000)์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ n๊ฐ์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์ฃผ์ด์ง๋ค.
์๋ -1,000๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์์ด๋ค.
๐ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ต์ ์ถ๋ ฅํ๋ค.
"""
# n ๊ฐ์ ์ ์
n = int(input())
# n ๊ฐ๋ก ์ด๋ค์ง ์์ด
array = list(map(int, input().split()))
# dp 2์ฐจ์ ๋ฐฐ์ด์ ์ ๊ฑฐ, ์ ๊ฑฐํ์ง ์๋ ๊ฒ
dp = [ [0] * (n + 1) for _ in range(2)]
# ์ ๊ฑฐํ์ง ์์ dp
dp[0][0] = array[0]
# ์ฒซ ์์
answer = array[0]
# ์์ด์์ ์๋ฅผ ํ๋ ์ ๊ฑฐํ ์ ์๋ค. (์ ๊ฑฐํ์ง ์์๋ ๋๋ค)
for i in range(1, n) :
# ์ต๋๊ฐ (๊ทธ ์ + ํ์ฌ , ํ์ฌ)
dp[0][i] = max(dp[0][i - 1] + array[i], array[i])
# ์ต๋๊ฐ (ํ์ฌ ์ ๊ฑฐ, ์ด์ ์ ๊ฑฐ + ํ์ฌ)
dp[1][i] = max(dp[0][i - 1], dp[1][i - 1] + array[i])
# ์ ๊ฑฐx, ์ ๊ฑฐ0, ์ฒ์์๋ ์ฒซ ์ซ์ (๊ทธํ์ ๊ฐฑ์ )
answer = max(dp[0][i], dp[1][i], answer)
print(answer)
3. ํด์ค
- dp 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ ์ ๊ฑฐ, ์ ๊ฑฐํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ๋ง๋ฆ
- ๊ทธ ์ + ํ์ฌ, ํ์ฌ
- ํ์ฌ ์ ๊ฑฐ, ๊ทธ ์ ์ ๊ฑฐ + ํ์ฌ
- ๊ฐฑ์ ํ๋ค
This post is licensed under CC BY 4.0 by the author.