220505_w3_DP - Sunny-W-Park/elice-sw2-algorithms GitHub Wiki
๋ฐ์ ์ฐ - #14501 ํด์ฌ
๋ฌธ์ ํด์
- N: ์๋ด ๊ฐ๋ฅํ ๋จ์ ์ผ ์(N+1์ผ์ ํด์ฌ)
- N๊ฐ์ ์ค์ Ti(์๋ด ์์ ์ผ)์ Pi(๊ธ์ก)๊ฐ ์ฃผ์ด์ง
- ๊ฐ ์๋ด์ ์์ํ๋ฉด ์๋ด์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์๋ด์ ํ ์ ์์. N์ผ ๊ฐ ์ป์ ์ ์๋ ์ต๋ ๊ธ์ก์ ๊ตฌํ๋ผ
- 1์ผ ์ฐจ Ti=3, Pi=10 ์ด๋ผ๋ฉด 1,2,3์ผ ์ฐจ๊น์ง ๋ค๋ฅธ ์๋ด ๋ชปํจ, ๊ธ์ก 10
- 4์ผ ์ฐจ Ti=1, Pi=20 ์ด๋ผ๋ฉด 4์ผ ์ฐจ๊น์ง ๋ค๋ฅธ ์๋ด ๋ชปํจ, ๋์ ๊ธ์ก 10+20 = 30
์ ๊ทผ
- dp ํ์ฉ ๊ฐ idx์ dp๊ฐ์ ํด๋น ์ผ์๊น์ง ๊ธ์ก์ ์ต๋๊ฐ
- N์ผ ์ฐจ๋ถํฐ Ti, Pi๊ฐ์ ๊ฑฐ๊พธ๋ก ํ์ธํ๋ฉด์
- ์๋ด์ด ๊ฐ๋ฅํ์ง(i + Ti < N)
- ๋์ ๊ฐ์ด ์ต๋์ธ์ง ํ์ธ
ํ์ด ๊ณผ์
- table ๋ฐฐ์ด ๋ด์ [Ti, Pi] ๊ฐ์ ๋ฐฐ์ด๋ก ์ ์ฅ
- for๋ฌธ: N-1๋ถํฐ -1๊น์ง table์ ๊ฑฐ๊พธ๋ก ํ์ธ
- i + table[i][0] > N ์ผ ๊ฒฝ์ฐ ์๋ด ๋ถ๊ฐ -> ์ด์ dp๊ฐ๊ณผ ๋์ผํ dp[i+1]์ ์ ์ฅ -> dp[i] = dp[i+1]
- i + table[i][0] <= N ์ผ ๊ฒฝ์ฐ ์๋ด ๊ฐ๋ฅ -> ์ต๋๊ฐ ๋น๊ต(์ด์ dp๊ฐ, ์๋ด ์งํ ์ ๊ธ์ก) -> max(dp[i+1], dp[i+table[i][0]]+table[i][1])
๋ฐฑ์ฑํธ - #2011 ์ํธ์ฝ๋
๋ฌธ์ ํด์
- ์ํ๋ฒณ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ ์ซ์(1-26)๋ก ์ํธํ ํด์ ํ๋์ ๊ธด ์ซ์๋ก ๋ง๋ ๋ค. ์ด ๋ ์ซ์๋ฅผ ๋ค์ ์ํ๋ฒณ์ผ๋ก ๋ณํํ์ฌ ํด์ํ ๊ฒฝ์ฐ, ํด์ ๊ฐ๋ฅํ ๋ฌธ์์ด์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํด์ผ ํ๋ค.
- ํ๋์ ์ซ์๋ก ์ด๋ฃจ์ด์ง ์ํธ๊ฐ ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ๊ฐ๋ฅํ ํด์์ ๊ฐ์ง์๋ฅผ 1000000์ผ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๊ทผ
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ํฉ์ N๊ฐ์ ์ซ์๊ฐ ์์ ๊ฒฝ์ฐ, ์์ N-1๊ฐ์ ์ซ์์ N๋ฒ์งธ ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ์ N-2๊ฐ์ ์ซ์์ N-1๋ฒ์งธ ์์ N-2๋ฒ์งธ ์๋ฅผ ํจ๊ป ์ถ๊ฐํ๋ ๊ฒฝ์ฐ์ด๋ค.
- ์ ํ์ DP(N) = DP(N-1)+DP(N-2)
- ๊ทธ๋ฌ๋ ์ถ๊ฐ๋๋ ์ซ์๊ฐ 0์ด๊ฑฐ๋ 27 ์ด์์ผ ๊ฒฝ์ฐ๋ฅผ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋ค.
ํ์ด ๊ณผ์
- ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ์
๋ ฅ ๋ฐ๋๋ค.
- dp๋ฅผ (์ฝ๋ ๋ฌธ์์ด์ ๊ธธ์ด+1)๋งํผ 0์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด๋ก ์ด๊ธฐํ ํ๋ค.
*๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 1์ธ๋ฐ ์
๋ ฅ์ด 0์ธ ๊ฒฝ์ฐ, ๋ถ๊ฐ๋ฅํ ์ํธ์ด๋ฏ๋ก 0์ ์ถ๋ ฅํ๊ณ , ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค.
- ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 1์ด๊ณ , 0 ์ด ์๋ ๊ฒฝ์ฐ 1๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก 1์ ์ถ๋ ฅํ๊ณ , ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค.
- ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 2๋ถํฐ ๋ฌธ์์ด N๊น์ง, dp[2]~dp[N]์ ๊ตฌํด์ผ ํ๋ค. ์ด๊ธฐ๊ฐ์ผ๋ก dp[0]=1, dp[1]=1์ ์ค์ ํ๋ค. ํ๋ฒํ ์ํฉ์ dp[2]=dp[1]+dp[0]=2 ์ด๊ณ , ํน์ ์ํฉ์ธ 203 ๊ฐ์ ๊ฒฝ์ฐ๋ 20/3 ์ผ๋ก๋ง ํด์์ด ๊ฐ๋ฅํ๋ฐ ์ด๊ฒ๋ ๊ฒฝ์ฐ์ ์๊ฐ 1์ด๋ผ ํธ๋ฆฌ๋ฅผ ์ํด dp[0]๋ 1๋ก ์ค์ ํ๋ค.
- dp์ N๋ฒ์งธ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํ ๊ฒฝ์ฐ, ์์๋ก โฆ..3421 ์์ 1์ด N๋ฒ์งธ ์์ผ ๋, ๋ ์๋ฆฌ ์๋ก ์ถ๊ฐ ํ ์ ์๋ 21, N-1๋ฒ์งธ ์ 2, N๋ฒ์งธ ์ 1์ ๋ชจ๋ ์์๋ก ๋ณํ ํ ๋ณ์์ ์ ์ฅํ๋ค.
- ๋ง์ฝ์ 0์ด ์ฐ์์ผ๋ก ๋ ๋ฒ ์๊ฑฐ๋, 30๊ฐ์ด 3/0 ๊ณผ 30๊ฐ์ด ๋ ๋ค ํด์์ด ๋ถ๊ฐ๋ฅํ๋ค๋ฉด, ๋ถ๊ฐ๋ฅํ ์ํธ์ด๋ฏ๋ก 0์ ์ถ๋ ฅํ๊ณ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค.
*๋ง์ฝ์ 51๊ฐ์ด 26๋ณด๋ค ํฌ์ง๋ง, 5/1 ๋ก๋ ํด์์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ dp[n]=dp[n-1]์ด ์ฑ๋ฆฝํ๋ค.
- ๋ง์ฝ์ 10 ๊ฐ์ด 26๋ณด๋ค ์์ง๋ง, 1/0 ์ผ๋ก๋ ํด์์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ dp[n]= dp[n-2]๊ฐ ์ฑ๋ฆฝํ๋ค.
*๋ง์ฝ์ 2201 ๊ฐ์ ๊ฒฝ์ฐ๋ 2/20/1 ๊ฐ์ด ํด์์ด ๊ฐ๋ฅํ๋ค, ์ด ๋ 201 ๋ถ๋ถ์ 1๊ฐ์ง ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅํ๋ฏ๋ก, 06 ๊ฐ์ด ๊ทธ์ ์๊ฐ 0์ธ ๊ฒฝ์ฐ๋ dp[n]=dp[n-3]์ด ์ฑ๋ฆฝํ๋ค.
*๊ทธ ์ธ์ ํ๋ฒํ ๊ฒฝ์ฐ์๋ dp[n]=(dp[n-1]+dp[n-2])%1000000 ์ด ์ฑ๋ฆฝํ๋ค.
*dp ๋ฐฐ์ด์ ๋ง์ง๋ง์ธ dp[-1]์ ์ถ๋ ฅํ๋ค.
์ง์์ - #12865 ํ๋ฒํ๋ฐฐ๋ญ DP
๋ฌธ์ ํด์
- ๋ฐฐ๋ญ์ ๋ด์ ์ ์๋ ๋ฌด๊ฒ์ ์ต๋๊ฐ์ด ์ ํด์ ธ ์๊ณ , ์ผ์ ๊ฐ์น์ ๋ฌด๊ฒ๊ฐ ์๋ ์ง๋ค์ ๋ฐฐ๋ญ์ ๋ฃ์ ๋, ๊ฐ์น์ ํฉ์ด ์ต๋๊ฐ ๋๋๋ก ํ๋ ๊ฒ
- ์ ํ์ ์ธ ๋
์ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋ด์ ์ ์๋ ๋ฌผ๊ฑด์ด ๋๋์ด ์ง ์ ์์ ๋ ์ด๋ฏ๋ก 0-1 ๋ฐฐ๋ญ๋ฌธ์ ๋ผ๊ณ ํ๋ค.
์ ๊ทผ
- 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค์ด ๊ฐ์ ๊ณ์ ๊ฐฑ์ ํด๋๊ฐ๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด๋ค.
- ๋ชจ๋ ์ง๋ค์ i(์ธ๋ก)๋ก, ๊ทธ๋ฆฌ๊ณ ๋ฌด๊ฒ K๋ฅผ j(๊ฐ๋ก)๋ก 2์ค ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฐ๋ค.
ํ์ด ๊ณผ์
- j๊ฐ ํด๋น ์ง์ ๋ฌด๊ฒ๋ณด๋ค ์๋ค๋ฉด knapsack[i-1][j] (๊ฐ์ j์ด ์ผ๋ ์ ์ผ ์ต์ ์ ๊ฐ)
- j๊ฐ ํด๋น ์ง์ ๋ฌด๊ฒ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด knapsack[i-1][j]์ ํด๋น์ง์ ๊ฐ์น+knapsack[i-1][j-ํด๋น ์ง์ ๋ฌด๊ฒ] ๋์ค ํฐ๊ฒ์ผ๋ก ๊ฐฑ์ ํ๋ค.
- knapsack[n][k]๊ฐ์ ์ถ๋ ฅํ๋ค.
๊น์ฌ๋ฏผ - #1463 1๋ก ๋ง๋ค๊ธฐ
๋ฌธ์ ํด์
- ์ฃผ์ด์ง ์ ์ N์ ๋ํ์ฌ 2๋ก ๋๋๊ฑฐ๋ 3์ผ๋ก ๋๋๊ฑฐ๋ 1์ ๋นผ์ 1๋ก ๋ง๋ ๋ค
์ ๊ทผ
- ์ต์ ํด๋ฅผ dp๋ฐฐ์ด index N์ ์ ์ฅ
- 2๋ก ๋๋์ด ์ง๋ค๋ฉด count 1๊ณผ N์์ 2๋ก ๋๋๊ณ ๋ ๋๋จธ์ง dp[N//2] ์ต์ ํด count๋ฅผ ๋ํ๊ฐ์ index N์ ์ ์ฅํด๋๊ฐ๋ค. 3์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ฉฐ ์ด์ธ ๊ฒฝ์ฐ๋ count1๊ณผ๋ฐ๋ก ์ dp[N-1] count๋ฅผ ๋ํ๋ค
- ์ ํ์ N์ด 2๋ก ๋๋์ด ๋จ์ด์ง๋ DP(N) = 1 + dp[N//2] 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ DP(N) = 1 + dp[N//3] ์ด์ธ DP(N) = 1 + dp[N-1]
ํ์ด ๊ณผ์
- ์ซ์๋ฅผ ๋ฌธ์์ด๋ก ์
๋ ฅ ๋ฐ๋๋ค.
- dp ๋ฐฐ์ด์ N์ด 0์ผ ๊ฒฝ์ฐ, 1์ผ ๊ฒฝ์ฐ, 2์ผ ๊ฒฝ์ฐ, 3์ผ ๊ฒฝ์ฐ ์ต์ ํด๋ฅผ ๋ฃ๋๋ค.
- N์ด 4์ด์์ด๋ผ๋ฉด for๋ฌธ์ด ๋์๊ฐ๋ค.
- 2๋ก ๋๋ ์ต์ ํด์ 3์ผ๋ก ๋๋ ์ต์ ํด, ๋ฐ๋ก ์ ์ต์ ํด ์ค ๊ฐ์ฅ ์ต์์ธ ๊ฐ์ ์ฐพ๊ธฐ ์ํด min_arr๋ฅผ ๋ฌดํ๋๋ก ์ด๊ธฐํ ํ๋ค.
- 2๋ก ๋๋์ด ์ง๋ค๋ฉด count 1๊ณผ N์์ 2๋ก ๋๋๊ณ ๋ ๋๋จธ์ง dp[N//2] ์ต์ ํด count๋ฅผ ๋ํ๊ฐ์ index N์ ์ ์ฅํด๋๊ฐ๋ค. 3์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ฉฐ ์ด์ธ ๊ฒฝ์ฐ๋ count1๊ณผ๋ฐ๋ก ์ dp[N-1] count๋ฅผ ๋ํ๋ค
- min_arr์์ 2๋ก ๋๋ ์ต์ ํด๋ 0, 3์ผ๋ก ๋๋ ์ต์ ํด๋ 1, -1์ ํ ์ต์ ํด๋ 3์ ๋์
ํ์ฌ ์ต์๋ฅผ ๊ตฌํ๋ค.
- ์ต์์ธ ์ต์ ํด๋ฅผ dp์ ๋์
ํ๋ค.
- N์ ์ต์ ํด์ธ dp[X]๊ฐ์ ์ถ๋ ฅํ๋ค.