Purchase Card
Last updated
Last updated
d[n] = n๊ฐ ์นด๋ ๊ตฌ๋งคํ ๋ ์ง๋ถํ๋ ์ต๋ ๊ธ์ก
d[n] ์ ๊ตฌํ ๋, P[n]๊ณผ "๋ค๋ฅธ ๊ฐ"๋ค์ ๋น๊ตํด์ ์ต๋๊ฐ์ ๊ตฌํ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋ฐ, ์ด "๋ค๋ฅธ ๊ฐ"์ ์ด๋ป๊ฒ ์์์ผ๋ก ๋ํ๋ผ์ง ๋ชฐ๋์๋ค.
์ด ๋ถ๋ถ์ ๊ตฌ์ฒดํํ์๋ฉด, d[n] = n๊ฐ ์นด๋ ๊ตฌ๋งค ์ ์ง๋ถ ์ต๋ ๊ธ์ก, ์นด๋ n๊ฐ๋ฅผ ๊ตฌ๋งคํ๋ ๋ฐฉ๋ฒ์
์นด๋ 1๊ฐ ๋ ์นด๋ํจ ๊ตฌ๋งค, ์นด๋ n-1๊ฐ ๊ตฌ๋งค = P[1] + d[n-1] = ์นด๋ 1๊ฐ๋ ์นด๋ํฉ ๊ตฌ๋งค + ์นด๋ n-1๊ฐ ๊ตฌ๋งค์ ์ง๋ถ ์ต๋ ๊ธ์ก
์นด๋ 2๊ฐ ๋ ์นด๋ํฉ ๊ตฌ๋งค, ์นด๋ n-2๊ฐ ๊ตฌ๋งค
...
์นด๋ n๊ฐ ๋ ์นด๋ํฉ ๊ตฌ๋งค, ์นด๋ 0๊ฐ ๊ตฌ๋งค
์ด๋ฐ ์์ผ๋ก ์นด๋ i๊ฐ๋ฅผ ๊ตฌ๋งคํจ์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ผ๋ก ๊ตฌ๋งคํ ์นด๋ ๊ฐฏ์๋ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋๋จธ์ง๋ ๊ทธ๋ฅ N-i๊ฐ ์นด๋๋ฅผ ๊ตฌ๋งคํ๋ ๊ฒ์ผ๋ก ์น๋ถํ๋ฉด ๋๋ค.
๋ฐ๋ผ์ ์์ ์๋ฎฌ๋ ์ด์ ์ ํตํด d[n] = max(p[i] + d[n-i]) ๋ผ๋ ์์ด ๋์จ๋ค!! ์ฌ๊ธฐ์ d[n-i] ์ n-i๋ 0์ด ์ต์์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ๊ตฌํํ ๋, i๊ฐ ์ฆ๊ฐํ๋ ๋ฒ์๋ ์ด ํํ์์์์ n๊น์ง. ๋ฐ๋ณต ๋ณ์๋ก ์นํํด๋ณด๋ฉด n=>i, i=>j ์ด๊ณ , j๋ i์ ๊ฐ์์ง ๋๊น์ง๋ง ์ฆ๊ฐํ๋ค.
d[i] = Math.max(p[ j ] + d[i -j], d[i])