Skip to content

Commit f0c3080

Browse files
committed
[Gold V] Title: 평범한 배낭, Time: 180 ms, Memory: 53812 KB -BaekjoonHub
1 parent 423c827 commit f0c3080

File tree

2 files changed

+25
-20
lines changed

2 files changed

+25
-20
lines changed

백준/Gold/12865. 평범한 배낭/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
### 성능 요약
66

7-
메모리: 53852 KB, 시간: 208 ms
7+
메모리: 53812 KB, 시간: 180 ms
88

99
### 분류
1010

1111
다이나믹 프로그래밍, 배낭 문제
1212

1313
### 제출 일자
1414

15-
2024년 10월 22일 13:07:23
15+
2025년 3월 12일 11:30:11
1616

1717
### 문제 설명
1818

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,39 @@
1-
import java.util.*;
21
import java.io.*;
2+
import java.util.*;
33

44
public class Main {
55
public static void main(String[] args) throws IOException {
6+
67
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7-
String[] inputs = br.readLine().split(" ");
88

9-
int N = Integer.parseInt(inputs[0]);
10-
int K = Integer.parseInt(inputs[1]);
9+
StringTokenizer st = new StringTokenizer(br.readLine());
1110

12-
int[][] item = new int[N + 1][2];
11+
int N = Integer.parseInt(st.nextToken());
1312

14-
for (int i = 1; i <= N; i++) {
15-
inputs = br.readLine().split(" ");
16-
item[i][0] = Integer.parseInt(inputs[0]);
17-
item[i][1] = Integer.parseInt(inputs[1]);
13+
int K = Integer.parseInt(st.nextToken());
14+
15+
int W[] = new int[N+1];
16+
int V[] = new int[N+1];
17+
for(int i =1; i<=N; i++) {
18+
st =new StringTokenizer(br.readLine());
19+
W[i] = Integer.parseInt(st.nextToken());
20+
V[i] = Integer.parseInt(st.nextToken());
1821
}
1922

20-
int[][] dp = new int[N + 1][K + 1];
23+
int dp[][] = new int[N+1][K+1];
2124

22-
for (int k = 1; k <= K; k++) {
23-
for (int i = 1; i <= N; i++) {
24-
dp[i][k] = dp[i - 1][k];
25-
if (k - item[i][0] >= 0) {
26-
dp[i][k] = Math.max(dp[i - 1][k], item[i][1] + dp[i - 1][k - item[i][0]]);
25+
for(int i =1; i<=N; i++) {
26+
for(int j = 1; j<=K; j++) {
27+
if(W[i] <=j) {
28+
dp[i][j] = Math.max(dp[i-1][j], V[i] + dp[i-1][j-W[i]]);
29+
}
30+
else {
31+
dp[i][j] = dp[i-1][j];
2732
}
2833
}
2934
}
30-
31-
3235
System.out.println(dp[N][K]);
3336
}
34-
}
37+
38+
39+
}

0 commit comments

Comments
 (0)