๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/SWEA

[SWEA] 5215 ํ–„๋ฒ„๊ฑฐ ๋‹ค์ด์–ดํŠธ D3 - ์ž๋ฐ”(Java)/ ์ค‘๋ณต์กฐํ•ฉ, DFS, DP

๐Ÿ“‘ ๋ฌธ์ œ

 

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

๋”๋ณด๊ธฐ

๋ฌธ์ œ

ํ‰์†Œ ํ–„๋ฒ„๊ฑฐ๋ฅผ ์ข‹์•„ํ•˜๋˜ ๋ฏผ๊ธฐ๋Š” ์ตœ๊ทผ ๋ถ€์ฉ ๋Š˜์–ด๋‚œ ์‚ด ๋•Œ๋ฌธ์— ๊ฑฑ์ •์ด ๋งŽ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ํ–„๋ฒ„๊ฑฐ๋ฅผ ํฌ๊ธฐํ•  ์ˆ˜ ์—†์—ˆ๋˜ ๋ฏผ๊ธฐ๋Š” ํ–„๋ฒ„๊ฑฐ์˜ ๋ง›์€ ์ตœ๋Œ€ํ•œ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •ํ•ด์ง„ ์นผ๋กœ๋ฆฌ๋ฅผ ๋„˜์ง€ ์•Š๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ์ฃผ๋ฌธํ•˜์—ฌ ๋จน์œผ๋ ค๊ณ  ํ•œ๋‹ค.

 

๋ฏผ๊ธฐ๊ฐ€ ์ฃผ๋กœ ์ด์šฉํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ๋Š” ๊ณ ๊ฐ์ด ์›ํ•˜๋Š” ์กฐํ•ฉ์œผ๋กœ ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ค€๋‹ค.

ํ•˜์ง€๋งŒ ์žฌ๋ฃŒ๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์„œ ์ค€๋น„ํ•ด๋†“๊ธฐ ๋•Œ๋ฌธ์— ์กฐํ•ฉ์— ๋“ค์–ด๊ฐ€๋Š” ์žฌ๋ฃŒ๋ฅผ ์ž˜๋ผ์„œ ์กฐํ•ฉํ•ด์ฃผ์ง€๋Š” ์•Š๊ณ , ์žฌ๋ฃŒ๋ฅผ ์„ ํƒํ•˜๋ฉด ์ค€๋น„ํ•ด๋†“์€ ์žฌ๋ฃŒ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํ•ฉํ•ด์ค€๋‹ค. 

๋ฏผ๊ธฐ๋Š” ์ด ๊ฐ€๊ฒŒ์—์„œ ์ž์‹ ์ด ๋จน์—ˆ๋˜ ํ–„๋ฒ„๊ฑฐ์˜ ์žฌ๋ฃŒ์— ๋Œ€ํ•œ ๋ง›์„ ์ž์‹ ์˜ ์˜ค๋žœ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์ ์ˆ˜๋ฅผ ๋งค๊ฒจ๋†“์•˜๋‹ค.

๋ฏผ๊ธฐ์˜ ํ–„๋ฒ„๊ฑฐ ์žฌ๋ฃŒ์— ๋Œ€ํ•œ ์ ์ˆ˜์™€ ๊ฐ€๊ฒŒ์—์„œ ์ œ๊ณตํ•˜๋Š” ์žฌ๋ฃŒ์— ๋Œ€ํ•œ ์นผ๋กœ๋ฆฌ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,

๋ฏผ๊ธฐ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ๋จน์œผ๋ฉด์„œ๋„ ๋‹ค์ด์–ดํŠธ์— ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •ํ•ด์ง„ ์นผ๋กœ๋ฆฌ ์ดํ•˜์˜ ์กฐํ•ฉ ์ค‘์—์„œ ๋ฏผ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์„ ํ˜ธํ•˜๋Š” ํ–„๋ฒ„๊ฑฐ๋ฅผ ์กฐํ•ฉํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž.

(๋‹จ ์—ฌ๋Ÿฌ ์žฌ๋ฃŒ๋ฅผ ์กฐํ•ฉํ•˜์˜€์„ ํ–„๋ฒ„๊ฑฐ์˜ ์„ ํ˜ธ๋„๋Š” ์กฐํ•ฉ๋œ ์žฌ๋ฃŒ๋“ค์˜ ๋ง›์— ๋Œ€ํ•œ ์ ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ๊ฒฐ์ •๋˜๊ณ , ๊ฐ™์€ ์žฌ๋ฃŒ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ํ–„๋ฒ„๊ฑฐ์˜ ์กฐํ•ฉ์˜ ์ œํ•œ์€ ์นผ๋กœ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์—†๋‹ค.)

 

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
 

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์žฌ๋ฃŒ์˜ ์ˆ˜, ์ œํ•œ ์นผ๋กœ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N, L(1 ≤ N ≤ 20, 1 ≤ L ≤ 104)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค.
 

๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ์žฌ๋ฃŒ์— ๋Œ€ํ•œ ๋ฏผ๊ธฐ์˜ ๋ง›์— ๋Œ€ํ•œ ์ ์ˆ˜์™€ ์นผ๋กœ๋ฆฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Ti, Ki(1 ≤ Ti ≤ 103, 1 ≤ Ki ≤ 103)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

๊ฐ ์ค„๋งˆ๋‹ค "#T" (T๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋ฒˆํ˜ธ)๋ฅผ ์ถœ๋ ฅํ•œ ๋’ค, ์ฃผ์–ด์ง„ ์ œํ•œ ์นผ๋กœ๋ฆฌ ์ดํ•˜์˜ ์กฐํ•ฉ์ค‘์—์„œ ๊ฐ€์žฅ ๋ง›์— ๋Œ€ํ•œ ์ ์ˆ˜๊ฐ€ ๋†’์€ ํ–„๋ฒ„๊ฑฐ์˜ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ž…๋ ฅ

1
5 1000
100 200
300 500
250 300
500 1000
400 400
//Test Case ๊ฐฏ์ˆ˜
//Test Case #1, N = 5, L = 1000
//Test Case #1, ์ฒซ๋ฒˆ์งธ ์žฌ๋ฃŒ ์ •๋ณด



 

 

์ถœ๋ ฅ

#1 750 //Test Case #1์˜ ์ •๋‹ต

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 DFS๋กœ ์กฐํ•ฉ ์ฝ”๋“œ๋ฅผ ์งœ์„œ ํ‘ธ๋Š” ๋ฒ•๊ณผ, DP๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 ๋‚˜๋Š” ์กฐํ•ฉ์„ ์—ฐ์Šตํ•˜๊ธฐ์—๋Š” ์š” ๋ฌธ์ œ๊ฐ€ ์ตœ๊ณ  ์งฑ์งฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, DP ์—ฐ์Šต์œผ๋กœ๋„ ์ข‹์€๋“ฏ..?

 

 ๐Ÿ’ก DFS๋กœ ํ’€๊ธฐ

 ์กฐํ•ฉ์„ ํ’€๊ณ  ์‹ถ์œผ๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ๋œ๋‹ค! ์‹ธํ”ผ์—์„œ ์กฐํ•ฉ์œผ๋กœ ๋“ค์–ด๊ฐˆ ๋•Œ ์ด ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์ž๊ณ  ํ–ˆ๋‹ค (ใ…‹ใ…‹)

 ํ–„๋ฒ„๊ฑฐ ์žฌ๋ฃŒ๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐํ•ฉํ• ์ง€ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค. 

 ๋ฌธ์ œ๋ฅผ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 1. ํŠน์ • ์žฌ๋ฃŒ๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์„ ํƒ ์•ˆํ•  ์ˆ˜๋„ ์žˆ๋‹ค. => ์กฐํ•ฉ

 2. ๊ฐ™์€ ์žฌ๋ฃŒ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค => ์ค‘๋ณต์กฐํ•ฉ์ด ์•„๋‹˜

 3. ๋งŒ๋“  ์กฐํ•ฉ์ด ์นผ๋กœ๋ฆฌ ์ œํ•œ์„ ๋„˜์œผ๋ฉด ์•ˆ๋œ๋‹ค => DFS๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ฌ ์กฐ๊ฑด๋ฌธ

 4. ์กฐํ•ฉํ•œ ์žฌ๋ฃŒ๋“ค์˜ ์„ ํ˜ธ๋„ ํ•ฉ์ด ์ œ์ผ ํฐ ๊ฒƒ์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค => ์กฐํ•ฉ์„ ๋งˆ์น  ๋•Œ๋งˆ๋‹ค ์ฒดํฌ

 

 ์œ„ ์กฐ๊ฑด์— ๋งž๊ฒŒ DFS ์ฝ”๋“œ๋ฅผ ์งœ์•ผ ํ•˜๋Š”๋ฐ, ์ž์„ธํ•œ ์„ค๋ช…์€ ์ฝ”๋“œ์— ์ฃผ์„์œผ๋กœ ์ฒจ๋ถ€ํ•˜๊ฒ ๋‹ค.

 

 

 

๐Ÿ’ก DP๋กœ ํ’€๊ธฐ

 ์ €๋Š” ์•„์ง DP๋ฅผ ํ’€์ง€ ๋ชปํ•ด์„œ.....์‹ธํ”ผ ๋‹น์‹œ ๋™๊ธฐ ๋ถ„์˜ ์ฝ”๋“œ ์‚ด์ง ๋ฐ”๊ฟ”๋‘”๊ฑธ ์ฒจ๋ถ€ํ•œ ๊ฒƒ์œผ๋กœ ๋Œ€์ฒดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค(^^)

 ํ’€ ์ค„ ์•„๋Š” ๋ถ„๋“ค์€ ์•„๋ž˜ ์ฝ”๋“œ ๋ณด๋ฉด ์•„์‹ค ๊ฒƒ....

 

 

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ๐Ÿ—“๏ธ 2021.8.11

 ํ’€์ง€ ๋ชปํ–ˆ๋‹ค...........์–ธ์ œ์˜€์ง€ ํ’€์–ด๋ณด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ๊ทธ๋•Œ๋„ ๋ชปํ’€์—ˆ๋‹ค.

 ๊ต์ˆ˜๋‹˜์ด ์ด์ œ ๋ฌธ์ œ ๋ช‡ ๊ฐœ ํ’€์–ด๋ดค์œผ๋‹ˆ ๋‹ค์‹œ ํ’€์–ด๋ณด๋ผ๊ณ  ์‹œ๊ฐ„์„ ์ฃผ์…จ๋Š”๋ฐ ๋˜ ๋ชปํ’€์—ˆ๋‹ค. ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ D3์ง€? D4๋Š” ๋˜์–ด์•ผํ•˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”...

 ๋‹ค๋“ค ์ž˜ ํ‘ธ๋„ค..ใ… ใ… ์ง„์งœ ๋„ˆ๋ฌด...์ž์กด๊ฐ์ด ๋ฐ”๋‹ฅ์น˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ๊ทน์น˜๋ฅผ ์ฐ๋Š”๋‹ค. ๋„๋ง์น˜๊ณ  ์‹ถ๋‹ค..

 ํ‘ธ๋Š” ๋ฐฉ์‹๋“ค์ด ๋‹ค ๋˜‘๊ฐ™๋‹ค. DFS์ฒ˜๋Ÿผ ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋ชจ๋‘ ๊ฐ€๋ณธ๋‹ค.

 ์•„!!!! ๋‚˜ ๋ฐ”๋ณด๋„ค..ใ… ใ… ใ… ใ… ๋ถ€๋ถ„์ง‘ํ•ฉ์€ ์œ ํŠœ๋ธŒ ๋ผ์ด๋ธŒ ๊ฐ•์˜์—์„œ ์ˆœ์—ด/์กฐํ•ฉ์œผ๋กœ ํ’€์–ด๋ดค์ž–์•„!!!!!!

 ํ–„๋ฒ„๊ฑฐ ๋ฌธ์ œ=๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐ์ด ๊ท€๊ฒฐ๋˜์งˆ ์•Š์•˜๋‹ค.

 

๐Ÿ—“๏ธ ๊ธ€์“ฐ๋Š” ํ˜„์žฌ

 2๋…„ ์ „์˜ ๋‚˜.....์ œ๋ฒ• ๊ท€์—ฌ์› ๊ตฐ(ใ…‹ใ…‹) ๐Ÿฅน

 ์ € ๋•Œ ๋‚˜๋Š” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ผ๋Š”๊ฑด ํ•ด๋ณธ ์ ๋„ ์—†๋Š”๋ฐ ์‹ธํ”ผ์— ์ž…์†Œํ•ด์„œ, 

 ๐Ÿ‘ฆ (๊ต์ˆ˜๋‹˜): ์—ฌ๋Ÿฌ๋ถ„๋“ค ๊ทธ๋Ÿผ ์ด๋ฒˆ์—” ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ์ž ํ’€์–ด๋ณผ๊นŒ์š”~?
 ๐Ÿ‘ฅ : ๋„ค์—~!!!

 

 ์–ด๋ ค์›Œํ•˜๋Š” ์‚ฌ๋žŒ ์—†์ด ์ฐฉ์ฐฉ์ฐฉ ์ง„ํ–‰๋˜๋Š” ๊ฐ•์˜์— ํ˜ผ์ž ์ ์‘ํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.

 ๋‚˜๋งŒ....์ด๋Ÿฐ๊ฑฐ ํ•  ์ค„ ๋ชฐ๋ผ? ๋‚˜๋งŒ ๋ฌธ์ œ ํ‘ธ๋Š” ๋ฒ• ๋ชฐ๋ผ? ๋‚˜๋งŒ ํ•จ์ˆ˜ ๋ชฐ๋ผ? ๋‚˜๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชฐ๋ผ?

 ใ…‹ใ…‹ใ…‹ใ…‹๋ฌดํ•œ์˜ ๋ฌผ์Œํ‘œ ใ… ใ… ใ… ใ… ใ… ใ… ใ… ใ… ใ… 

 ํ•˜์ง€๋งŒ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ด๋„ ์ด๋•Œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ์ฝ”๋“œ๋„ ๋ณด๊ณ , ๊ต์ˆ˜๋‹˜์˜ ํ’€์ด๋ฅผ ๋ณด์•˜๋˜๊ฒŒ ์ง€๊ธˆ์˜ ๋‚ด๊ฒŒ ํฐ ๋„์›€์ด ๋˜์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 ํ˜ผ์ž ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๊ณต๋ถ€ํ•ด.... ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ ธ์„ ๊ฒƒ์ด๊ณ , ๊ทธ๋งŒํผ์˜ ์˜์ง€๋ ฅ๋„ ์•ˆ๋์„ ๊ฒƒ์ด๋‹ค.

 ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋˜ ๋ณ‘์•„๋ฆฌ ์ž…์„ ๊ฐ•์ œ๋กœ ๋ฒŒ๋ ค ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์คฌ๋˜ ์‹ธํ”ผ....์ง€๊ธˆ๋„ ์‚ฌ๋ž‘ํ•ด๐Ÿซถ

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ์ž๋ฐ”(Java)

DFS
public class Solution_SWEA_5215_ํ–„๋ฒ„๊ฑฐ๋‹ค์ด์–ดํŠธ_D3 {
	static int[] taste, cal;
	static int N, L, max;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int T = Integer.parseInt(br.readLine()); //ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

        for (int testCase = 1; testCase <= T; testCase++) {
            st = new StringTokenizer(br.readLine(), " ");
            N = Integer.parseInt(st.nextToken());//์žฌ๋ฃŒ์˜ ์ˆ˜
            L = Integer.parseInt(st.nextToken());//์ œํ•œ ์นผ๋กœ๋ฆฌ

            taste = new int[N]; //๋ง› ์ ์ˆ˜
            cal = new int[N]; //์นผ๋กœ๋ฆฌ
            for (int i = 0; i < N; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                taste[i] = Integer.parseInt(st.nextToken());
                cal[i] = Integer.parseInt(st.nextToken());
            }//end of input

            max = 0;
            getSubSet(0, 0, 0);

            sb.append("#").append(testCase).append(" ").append(max).append("\n");
        }
        System.out.print(sb);
    }

    private static void getSubSet(int cnt, int calSum, int tasteSum) { //์žฌ๋ฃŒ ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ตฌํ•˜๊ธฐ
        if (calSum > L) return; //์ตœ๋Œ€ ์นผ๋กœ๋ฆฌ ์ดˆ๊ณผํ•˜๋ฉด ๋Œ์•„๊ฐ€๊ธฐ
        if (cnt == N) {
        	// ๋งˆ์ง€๋ง‰ ์žฌ๋ฃŒ๊นŒ์ง€ ํ™•์ธํ–ˆ์œผ๋ฉด(์กฐํ•ฉ์œผ๋กœ ํฌํ•จํ–ˆ๋“  ์•ˆํ–ˆ๋“ ) DFS์—์„œ ๋น ์ ธ๋‚˜์˜จ๋‹ค
            // ๊ทธ ์ „์— ์ง€๊ธˆ๊นŒ์ง€ ์กฐํ•ฉ์˜ ์นผ๋กœ๋ฆฌ ํ•ฉ์ด ์ตœ๋Œ€๋ฅผ ๋„˜์ง€ ์•Š์•˜์œผ๋ฉด, max๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
        	if(calSum <= L) max = Math.max(max, tasteSum);
            return; 
		}
        
        //ํ•ด๋‹น ์žฌ๋ฃŒ ์„ ํƒํ–ˆ์„ ๋•Œ
        getSubSet(cnt + 1, calSum + cal[cnt], tasteSum + taste[cnt]);

        //ํ•ด๋‹น ์žฌ๋ฃŒ ์„ ํƒํ•˜์ง€ ์•Š์•˜์„ ๋•Œ
        getSubSet(cnt + 1, calSum, tasteSum);
    }
}

 

 

DP
public static void main(String[] args) throws Exception {
	BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
	int tc= Integer.parseInt(br.readLine());
	StringBuilder sb= new StringBuilder();
	for(int t= 1; t<= tc ;t++) {
		StringTokenizer st = new StringTokenizer(br.readLine()," ");
		int n = Integer.parseInt(st.nextToken()); //์žฌ๋ฃŒ์˜ ์ˆ˜
		int l = Integer.parseInt(st.nextToken()); //์ œํ•œ ์นผ๋กœ๋ฆฌ
		int[] T = new int[n+1];
		int[] K = new int[n+1];
		for(int i=1;i<=n;i++) {
			StringTokenizer st1 = new StringTokenizer(br.readLine()," ");
			T[i]=Integer.parseInt(st1.nextToken());
			K[i]=Integer.parseInt(st1.nextToken());
		}
		
		int[][] dp=new int[n+1][l+1];
		
		for(int i=1;i<=n;i++) {
			for(int j=0;j<=l;j++) {
			if(j<K[i]) {
					dp[i][j]=dp[i-1][j];
				}
				else {
					dp[i][j]=Math.max(dp[i-1][j-K[i]]+T[i], dp[i-1][j]);
				}
			}
		}	
		sb.append("#").append(t).append(" ").append(dp[n][l]).append("\n");
	}
	
	System.out.print(sb);
}

 

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ