사용 알고리즘 : DP
dp배열을 2차원으로 받는다
dp[i][j]
i = i번째 배낭
j = 무게
1
2
3
4
5
6
7
8
9
10
11
12
13
|
for(int i=1; i<=n; i++) {
Node a = bag[i-1];
int w= a.w;
int v= a.v;
for(int j=1; j<=k; j++) {
dp[i][j] = dp[i-1][j];
if(j-a.w>=0) {
}
}
}
System.out.println(dp[n][k]);
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
이 코드만 이해하면 끝이다
w = 무게
v = 가치
5번째 반복문은 들 수 있는 무게가 100이라고 치면
1~100까지 무게의 들 수 있는 최대 가치이다.
6번째 줄의 dp[i][j] = dp[i-1][j] 같은 무게 일 때 일단 지난단계의 값을 받는다 (7번째 줄이 안되면 값이 비므로 받아야함)
7번째줄 if(j-a.w>=0) 우선 j는 무게이다
만약 현재 배낭의 무게가 4이고 지금 아이템의 무게가 5라면
무게를 초과함으로 아이템이 들어가지 못한다.
하지만 들어 갈 수 있다면
dp[i-1][j-w]+v 와 비교를 하는데
천천히 이해해보자.
i-1을 하는 이유는 일단 지금 새로운 아이템을 넣어보는 것 이므로 아이템의 개수를 하나 뺀다.
j-w를 하는 이유는 기존의 무게에서 새로 들어갈 아이템의 가치의 최댓값 + 현재 아이템의 가치
이와 같이 진행 하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
public class Main {
static int n,k;
static int max = 1;
static Node bag[];
static int dp[][];
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] t = br.readLine().split(" ");
n = Integer.parseInt(t[0]); // 물건의수
k = Integer.parseInt(t[1]); // 버틸수 있는 무게
dp = new int[n+1][k+1];
bag = new Node[n];
for(int i=0; i<n; i++) {
String[] tt = br.readLine().split(" ");
int w = Integer.parseInt(tt[0]);
int v = Integer.parseInt(tt[1]);
bag[i] = new Node(w,v);
}
for(int i=1; i<=n; i++) {
Node a = bag[i-1];
int w= a.w;
int v= a.v;
for(int j=1; j<=k; j++) {
dp[i][j] = dp[i-1][j];
if(j-a.w>=0) {
}
}
}
System.out.println(dp[n][k]);
}
}
class Node{
int w,v;
Node(int w, int v){
this.w=w;
this.v=v;
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
cs |
'알고리즘' 카테고리의 다른 글
[백준 5557] 1학년 -JAVA // le_effort// (0) | 2020.03.11 |
---|---|
[백준 1495] 기타리스트 - JAVA // le_effort// (0) | 2020.03.10 |
[백준 11058] 크리보드 -JAVA // le_effort// (0) | 2020.03.10 |
[백준 2293] 동전 1 -JAVA //le_effort// (0) | 2020.03.10 |
[백준 15990] 1,2,3 더하기5 -JAVA //le_effort// (0) | 2020.03.09 |