Skip to content

Commit c41d10a

Browse files
author
Jesse Adams
committed
Created SubsetSum.java
1 parent 3c07927 commit c41d10a

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

DynamicProgramming/SubsetSum.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package DynamicProgramming;
2+
3+
public class SubsetSum {
4+
5+
/*
6+
This algorithm will determine if a set of integers contains
7+
a subset that sum to a given integer. The algorithm will
8+
return true if such a subset exists and false otherwise.
9+
This is a dynamic programming implementation.
10+
*/
11+
12+
private static boolean subsetSum(int arr[], int n, int sum){
13+
boolean isSum[][] = new boolean[n + 2][sum + 1];
14+
15+
isSum[n + 1][0] = true;
16+
for (int i = 1; i <= sum; i++) {
17+
isSum[n + 1][i] = false;
18+
}
19+
20+
for (int i = n; i > 0; i--) {
21+
isSum[i][0] = true;
22+
for (int j = 1; j <= arr[i - 1] - 1; j++) {
23+
if (j <= sum) {
24+
isSum[i][j] = isSum[i + 1][j];
25+
}
26+
}
27+
for (int j = arr[i - 1]; j <= sum; j++) {
28+
isSum[i][j] = (isSum[i + 1][j] || isSum[i + 1][j - arr[i - 1]]);
29+
}
30+
}
31+
32+
return isSum[1][sum];
33+
}
34+
35+
/*
36+
This is a driver method to run the algorithm with four
37+
test values: the first two should evaluate true, and the
38+
last two should evaluate false.
39+
*/
40+
public static void main(String args[]) {
41+
int arr[] = new int[]{50, 4, 10, 15, 34};
42+
int n = arr.length;
43+
// 4 + 10 + 15 + 34 = 64
44+
int sum1 = 64;
45+
// 50 + 15 + 34 = 99
46+
int sum2 = 99;
47+
// No subset of the given array will give a sum
48+
// of 5 or 66
49+
int sum3 = 5;
50+
int sum4 = 66;
51+
52+
System.out.println(subsetSum(arr, n, sum1));
53+
System.out.println(subsetSum(arr, n, sum2));
54+
System.out.println(subsetSum(arr, n, sum3));
55+
System.out.println(subsetSum(arr, n, sum4));
56+
}
57+
}

0 commit comments

Comments
 (0)