Skip to content

Commit 294e6d4

Browse files
Knapsack task
1 parent 13c4295 commit 294e6d4

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

src/algorithms/knapsack/Main.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package algorithms.knapsack;
2+
3+
import java.util.Scanner;
4+
5+
public class Main {
6+
private final int MAX_CAPABILITY = 10000;
7+
private final int MAX_SUBJECTS_NUMBER = 300;
8+
private int[] subjectWeights = new int[MAX_SUBJECTS_NUMBER];
9+
private int[][] knapsackMaxWeight = new int[MAX_CAPABILITY + 1][MAX_SUBJECTS_NUMBER + 1];
10+
11+
private int calcKnapsackMaxWeight(int knapsackCapability, int subjectsNumber) {
12+
if (knapsackMaxWeight[knapsackCapability][subjectsNumber] != -1) {
13+
return knapsackMaxWeight[knapsackCapability][subjectsNumber];
14+
}
15+
16+
int firstWeight = calcKnapsackMaxWeight(knapsackCapability, subjectsNumber - 1);
17+
knapsackMaxWeight[knapsackCapability][subjectsNumber - 1] = firstWeight;
18+
19+
int remainingKnapsackCapability = knapsackCapability - subjectWeights[subjectsNumber - 1];
20+
if (remainingKnapsackCapability >= 0) {
21+
int secondWeight = calcKnapsackMaxWeight(
22+
remainingKnapsackCapability,
23+
subjectsNumber - 1
24+
) + subjectWeights[subjectsNumber - 1];
25+
knapsackMaxWeight[knapsackCapability][subjectsNumber - 1] = secondWeight;
26+
return Integer.max(firstWeight, secondWeight);
27+
}
28+
return firstWeight;
29+
}
30+
31+
private void init() {
32+
for (int i = 0; i <= MAX_CAPABILITY; i++) {
33+
for (int j = 0; j <= MAX_SUBJECTS_NUMBER; j++) {
34+
if (i == 0 || j == 0) {
35+
knapsackMaxWeight[i][j] = 0;
36+
} else {
37+
knapsackMaxWeight[i][j] = -1;
38+
}
39+
}
40+
}
41+
}
42+
43+
public void run() {
44+
init();
45+
Scanner scanner = new Scanner(System.in);
46+
int knapsackCapability = scanner.nextInt();
47+
int subjectsNumber = scanner.nextInt();
48+
for (int i = 0; i < subjectsNumber; i++) {
49+
subjectWeights[i] = scanner.nextInt();
50+
}
51+
int maxWeight = calcKnapsackMaxWeight(knapsackCapability, subjectsNumber);
52+
System.out.println(maxWeight);
53+
}
54+
55+
public static void main(String[] args) {
56+
new Main().run();
57+
}
58+
}

0 commit comments

Comments
 (0)