Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 75b7bfd

Browse files
Update subset_Sum.cpp
1 parent 937199e commit 75b7bfd

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

‎subset_Sum.cpp‎

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,35 @@
11
#include <bits/stdc++.h>
22
using namespace std;
3+
#define LLI long long int
34

4-
bool isSubsetSum(int a[], int n, int sum) {
5+
const int mx = 1e5+5;
6+
7+
// complexity: exponential
8+
bool isSubsetSumRec(int a[], int n, int sum) {
9+
if (sum == 0) return true;
10+
if (n == 0 && sum != 0) return false;
11+
if (a[n-1] > sum) return isSubsetSumRec(a, n-1, sum);
12+
return isSubsetSumRec(a, n-1, sum) || // excluding cur element
13+
isSubsetSumRec(a, n-1, sum-a[n-1]); // including cur element
14+
}
15+
16+
// complexity: Pseudo-polynomial
17+
bool isSubsetSumDP(int a[], int n, int sum) {
518
bool subset[n+1][sum+1];
619
for (int i = 0; i <= n; i++) subset[i][0] = true;
7-
for (int i = 1; i <= sum; i++) subset[0][i] = false;
20+
for (int i = 0; i <= sum; i++) subset[0][i] = false;
821
for (int i = 1; i <= n; i++) {
922
for (int j = 1; j <= sum; j++) {
1023
if (j < a[i-1]) subset[i][j] = subset[i-1][j];
1124
else subset[i][j] = subset[i-1][j] || subset[i-1][j-a[i-1]];
1225
}
13-
} /*
14-
for (int i = 0; i <= n; i++) {
15-
for (int j = 0; j <= sum; j++) printf("%4d", subset[i][j]);
16-
printf("\n");
17-
} */
26+
}
1827
return subset[n][sum];
1928
}
2029

2130
int main() {
22-
int a[] = {3, 34, 4, 12, 5, 2}, sum = 9;
23-
printf("%s\n", (isSubsetSum(a, sizeof(a)/sizeof(a[0]), sum)) ? "Subset Exist" : "Subset doesn't exist");
31+
int a[] = {3, 4, 2, 7, 8, 1, 3};
32+
int len = sizeof(a) / sizeof(a[0]);
33+
int sum; cin >> sum;
34+
cout << (isSubsetSumDP(a, len, sum) ? "Subset Found" : "Subset Not found!") << endl;
2435
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /