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

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 12์ฃผ์ฐจ] 14728๋ฒˆ ๋ฒผ๋ฝ์น˜๊ธฐ ๊ณจ๋“œ5 - ์ž๋ฐ”(JAVA)/ Knapsack๋ฌธ์ œ/ 2์ฐจ์› DP

 

 

 

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/14728

 

14728๋ฒˆ: ๋ฒผ๋ฝ์น˜๊ธฐ

ChAOS(Chung-ang Algorithm Organization and Study) ํšŒ์žฅ์ด ๋˜์–ด ์ผ์ด ๋งŽ์•„์ง„ ์ค€์„์ด๋Š” ์‹œํ—˜๊ธฐ๊ฐ„์—๋„ ์ผ ๋•Œ๋ฌธ์— ๊ณต๋ถ€๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๋‹ค๊ฐ€ ์‹œํ—˜ ์ „ ๋‚ ์ด ๋˜์–ด๋ฒ„๋ฆฌ๊ณ  ๋ง์•˜๋‹ค. ๋‹คํ–‰ํžˆ๋„ ์นœ์ ˆํ•˜์‹  ๊ต์ˆ˜๋‹˜๊ป˜์„œ ์•„๋ž˜์™€

www.acmicpc.net

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

๋ฌธ์ œ

ChAOS(Chung-ang Algorithm Organization and Study) ํšŒ์žฅ์ด ๋˜์–ด ์ผ์ด ๋งŽ์•„์ง„ ์ค€์„์ด๋Š” ์‹œํ—˜๊ธฐ๊ฐ„์—๋„ ์ผ ๋•Œ๋ฌธ์— ๊ณต๋ถ€๋ฅผ ํ•˜์ง€ ๋ชปํ•˜๋‹ค๊ฐ€ ์‹œํ—˜ ์ „ ๋‚ ์ด ๋˜์–ด๋ฒ„๋ฆฌ๊ณ  ๋ง์•˜๋‹ค. ๋‹คํ–‰ํžˆ๋„ ์นœ์ ˆํ•˜์‹  ๊ต์ˆ˜๋‹˜๊ป˜์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ํžŒํŠธ๋ฅผ ์‹œํ—˜ ์ „์— ๊ณต์ง€ํ•ด ์ฃผ์…จ๋‹ค. ๋‚ด์šฉ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์—ฌ๋Ÿฌ ๋‹จ์›์„ ์œตํ•ฉํ•œ ๋ฌธ์ œ๋Š” ์ถœ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ํ•œ ๋‹จ์›์— ํ•œ ๋ฌธ์ œ๋ฅผ ์ถœ์ œํ•œ๋‹ค. ๋‹จ, ๊ทธ ๋‹จ์›์— ๋ชจ๋“  ๋‚ด์šฉ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋‚ผ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ ๋‘๊ฐ€์ง€ ํžŒํŠธ์™€ ํ•จ๊ป˜ ๊ฐ ๋‹จ์› ๋ณ„ ๋ฐฐ์ ์„ ์ ์–ด ๋†“์œผ์…จ๋‹ค. ์–ด๋–ค ๋‹จ์›์˜ ๋ฌธ์ œ๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ ๋‹จ์›์˜ ์˜ˆ์ƒ ๊ณต๋ถ€ ์‹œ๊ฐ„๋งŒํผ, ํ˜น์€ ๊ทธ๋ณด๋‹ค ๋” ๋งŽ์ด ๊ณต๋ถ€ํ•˜๋ฉด ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋•Œ, ChAOS ํšŒ์žฅ ์ผ๋กœ ์ธํ•ด ํž˜๋“  ์ค€์„์ด๋ฅผ ์œ„ํ•˜์—ฌ ๋‚จ์€ ์‹œ๊ฐ„ ๋™์•ˆ ๊ณต๋ถ€ํ•ด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ์ฃผ๋„๋ก ํ•˜์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์—๋Š” ์ด๋ฒˆ ์‹œํ—˜์˜ ๋‹จ์› ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์‹œํ—˜๊นŒ์ง€ ๊ณต๋ถ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ์‹œ๊ฐ„ T(1 ≤ T ≤ 10000)๊ฐ€ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N ์ค„์— ๊ฑธ์ณ์„œ ๊ฐ ๋‹จ์› ๋ณ„ ์˜ˆ์ƒ ๊ณต๋ถ€ ์‹œ๊ฐ„ K(1 ≤ K ≤ 1000)์™€ ๊ทธ ๋‹จ์› ๋ฌธ์ œ์˜ ๋ฐฐ์  S(1 ≤ S ≤ 1000)๊ฐ€ ๊ณต๋ฐฑ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ค€์„์ด๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

 

 

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

 ์ „ํ˜•์ ์ธ Knapsack(๋ƒ…์ƒ‰)๋ฌธ์ œ์ด๋‹ค.

 ์‚ฌ์‹ค ๋‚œ ๋ฐฐ๋‚ญ ๋ฌธ์ œ๋Š” ํ‘ธ๋Š” ๋‹น์‹œ์—๋Š” ์–ด์ฐŒ์–ด์ฐŒ ๊ทธ๋ ‡๊ตฌ๋‚˜ ๋‚ฉ๋“ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š”๋ฐ, ๋จธ๋ฆฌ์— ์™„๋ฒฝํžˆ ๋…น์•„๋“ค์ง€๋Š” ์•Š์•„์„œ ๋‹ค์‹œ ํ’€ ๋•Œ๊ฐ€ ๋˜๋ฉด ์ƒˆ๋กœ์šด ์œ ํ˜•์„ ๋ณด๋“ฏ์ด ๋‚ฏ์„ค๋‹ค (ใ…Žใ…Ž)

 ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฐ™์€๊ฑด ์ž˜ ์ ์‘ํ•˜๊ณ  ํ‘ธ๋Š”๋ฐ ์ด์ƒํ•˜๊ฒŒ ๊ผญ ๋ชป ํ‘ธ๋Š” ๋ฌธ์ œ๋“ค์ด ์žˆ๋‹ค. 80%์˜ ํ™•๋ฅ ๋กœ DP ๋ฌธ์ œ์ด๋‹ค.

 

 2์ฐจ์›์œผ๋กœ ํ‘ธ๋Š” ์ด ํ˜•์‹์€ ํ…œํ”Œ๋ฆฟ์ฒ˜๋Ÿผ ์™ธ์›Œ๋‘ฌ์„œ ๊ทธ๋Œ€๋กœ ์ ์šฉํ–ˆ๊ณ , ๋ฌธ์ œ์—†์ด ์ž˜ ํ’€๋ ธ๋‹ค.

 ๋ƒ…์ƒ‰ ๋ฌธ์ œ๋ฅผ ํ’€๋ ค๋ฉด ์•„๋ž˜ ์†Œ์Šค์ฝ”๋“œ ์œ ํ˜•์€ ๊ทธ๋Œ€๋กœ ์™ธ์šฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค!

 

 

 

 

 

 

 

 

 

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

/** knapsack */
public class Main_๋ฐฑ์ค€_14728_๋ฒผ๋ฝ์น˜๊ธฐ_๊ณจ๋“œV {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int T = Integer.parseInt(st.nextToken());
		int[][] section = new int[N+1][2];
		
		for (int i = 1; i <= N; i++) {
			st = new StringTokenizer(br.readLine());
			int expectTime = Integer.parseInt(st.nextToken());
			int score = Integer.parseInt(st.nextToken());
			section[i][0] = expectTime;
			section[i][1] = score;
		}//input
		
		int[][] dp = new int[N+1][T+1];//1~T๊นŒ์ง€
		for (int i = 1; i <= N; i++) {//๊ณผ๋ชฉ๋ณ„
			int t = section[i][0];
			int score = section[i][1];
			for (int j = 1; j <= T; j++) {
				if(j>=t) {
					dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-t]+score);					
				}else {
					dp[i][j] = dp[i-1][j];
				}
			}
		}
		
		System.out.println(dp[N][T]);
	}//end of main
}//end of class

 

 

 

 

 

 

 

 

 

 

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

 

 

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

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