Purchase Card

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])

Last updated

Was this helpful?