๐ ๋ฌธ์ ํด์
๊ธฐํ ์ฐ์ฃผ๋ฅผ ํ๋๋ฐ ๊ฐ ๊ณก๋ง๋ค ๋ณผ๋ฅจ์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ค. ๊ณก๋ง๋ค ๋ณ๊ฒฝํ ์ ์๋ ์ซ์๊ฐ ์ ํด์ ธ์๋ค. ๊ทธ ์ซ์๋ก ํ์ฌ ๋ณผ๋ฅจ์์ ๋ํ๊ฑฐ๋ ๋บ ์๊ฐ ์๋ค. ๋ณผ๋ฅจ์ด ์์๊ฐ ๋์ค๋ฉด ์๋๊ณ ์ฃผ์ด์ง ๋ณผ๋ฅจ ๊ฐ์ ๋์ ์๋ ์๋ค.
์ด๋ ์ต๋ ๋ณผ๋ฅจ์?
๐ ๋ฌธ์ ํ์ด
1. n, s, m๊ณผ v๋ฅผ ์ ๋ ฅ๋ฐ๊ณ m ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋ฆฌ์คํธ n+1๊ฐ๋ฅผ ๋ง๋ ๋ค. (๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ์ํ)
2. ํ์ฌ ๋ณผ๋ฅจ์ ์ฒดํฌํ๋ค.
3. ์์ ๋ณผ๋ฅจ์์ ์ฃผ์ด์ง v[i]๋ฅผ ๋ํ ์ ์๋ค๋ฉด ๋ํ๊ณ ๋บ ์ ์๋ค๋ฉด ๋นผ์ค๋ค. 0<=s+v[i]<= m or 0<=s-v[i]<=m
4. 3๋ฒ์์ ๋ง๋ค์ด์ง ๋ณผ๋ฅจ์์ v[i]๋ฅผ ๋นผ๊ฑฐ๋ ๋ํ ์ ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํด์ค๋ค.
5. ๊ฐ์ฅ ๋ง์ง๋ง ๋ฆฌ์คํธ(์๊ณกํ ๋์ฌ ์ ์๋ ๋ณผ๋ฅจ๋ค์ด ๋ด๊ธด)๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ ๊ทธ ์ต๋๋ณผ๋ฅจ ๊ฐ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3 5 10
5 3 7
dp =[[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]
๋ฆฌ์คํธ ๋์ด๊ฐ ๋๋ง๋ค ๊ฐ๋ฅํ ๋ณผ๋ฅจ์์ v[i] ๋นผ๊ฑฐ๋ ๋ํด๋ณด๊ณ ๊ฐ๋ฅํ ๊ฐ์ด๋ผ๋ฉด ์ถ๊ฐํด์ค๋ค.
๐ป ์ฝ๋
# n์ ๊ณก์ ๊ฐ์, s๋ ์์ ๋ณผ๋ฅจ, m์ ์ต๋ ๋ณผ๋ฅจ
n, s, m = map(int, input().split())
# ๋ณผ๋ฅจ ๋ฆฌ์คํธ ์
๋ ฅ๋ฐ์
v = list(map(int, input().split()))
# dp ์ ์
dp = [[0] * (m+1) for i in range(n+1)]
# ์ฒ์ ์์
# print(dp[0][s])
dp[0][s] = 1
for i in range(1, n+1): # ๊ณก์ ๊ฐ์๋งํผ
for j in range(m+1): # ์ต๋ ๋ณผ๋ฅจ๊น์ง ๋๋ฉด์ ํ์ฌ ๋ณผ๋ฅจ์ ์ฐพ์
if dp[i-1][j] != 0: # ๋ณผ๋ฅจ ์กฐ์ ๊ฐ๋ฅํ๋ค๋ฉด ์ฆ ํ์ฌ ๋ณผ๋ฅจ ์ฐพ๊ธฐ
if 0<=j+v[i-1]<=m: # ํ์ฌ ๋ณผ๋ฅจ๊ณผ ๋ํ ๋ณผ๋ฅจ์ด 0 <= v <= m ์ด๋ผ๋ฉด ๋ํด์ค
dp[i][j+v[i-1]]=1
if 0<=j-v[i-1]<=m: # ํ์ฌ ๋ณผ๋ฅจ๊ณผ ๋บ ๋ณผ๋ฅจ์ด 0 <= v <= m ์ด๋ผ๋ฉด ๋นผ์ค
dp[i][j-v[i-1]]=1
# ๋ณผ๋ฅจ ์กฐ์ ๋ถ๊ฐํ ๊ฒฝ์ฐ -1 ์ถ๋ ฅ์ ์ํด ์ด๊ธฐ๊ฐ
ans = -1
dp = dp[n]
# ์ต๋๊ฐ ์ฐพ๊ธฐ ์ํด ๋ด๋ฆผ์ฐจ์์ผ๋ก for ๋ฌธ
for i in range(m, -1, -1):
if dp[i]==1: #์ต๋๊ฐ ๋ฐ๊ฒฌํ๋ฉด ์ค๋จ
ans = i
break
# ๊ฐ์ค 1์ด ํ๋๋ ์๋ค๋ฉด ๊ฐ๋ฅํ ๋ณผ๋ฅจ์ด ์๋ ๊ฒ์ด๋ค.
print(ans)
๋ฌธ์ ๋งํฌ : ๊ธฐํ๋ฆฌ์คํธ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 17478๋ฒ: ์ฌ๊ทํจ์๊ฐ ๋ญ๊ฐ์? - ํ์ด์ฌ (2) | 2022.05.04 |
---|---|
[๋ฐฑ์ค] 1620๋ฒ: ๋๋์ผ ํฌ์ผ๋ชฌ ๋ง์คํฐ ์ด๋ค์ - ํ์ด์ฌ (0) | 2022.05.03 |
[๋ฐฑ์ค] 2023๋ฒ: ์ ๊ธฐํ ์์ (0) | 2022.05.02 |
[๋ฐฑ์ค] ๐ฅณ200๋ฌธ์ ๋ฌ์ฑ!๐ฅณ (0) | 2022.05.01 |
[๋ฐฑ์ค] 1406๋ฒ: ์๋ํฐ - ํ์ด์ฌ (0) | 2022.04.30 |