/**
동적설계법
01 배낭문제(Knapsack problem) - 0
n = 4
(w, v) = {(2,3),(1,2),(3,4),(2,2)}
W = 5
ouput : 7
유명한 배낭 문제이다. 일반적인 방법으로 각 물건에 대해 (넣는다/넣지않는다)로 두 가지 상태로 나눠서 탐색한다.
**/
import java.io.*;
import java.lang.*;
class Main {
static int W;
static int[] v;
static int[] w;
static int n;
public static void main(String[] args) throws IOException {
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
n = 4;
w = new int[] {2, 1, 3, 2};
v = new int[] {3, 2, 4, 2};
W = 5;
int res = solve(0,W);
System.out.println(res);
}
static int solve(int i, int W) {
if (i == n) {
return 0;
} else if ( W < w[i]) {
//skip
return solve(i+1, W);
} else {
// 넣지 않는 경우, 넣는 경우 조사.
int a = solve(i+1, W);
int b = solve(i + 1, W - w[i]) + v[i];
return Math.max(a, b);
}
}
}
2018년 7월 14일 토요일
동적설계법 - 배낭문제 0
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기