Write a recursive solution to solve the Partition problem Pa
Solution
// C code to determine if there exist a subset such that sum of elemnets of subset is half of sum of total set
#include <stdio.h>
#include <stdbool.h>
bool partitionSum(int array[], int size, int subsetSum)
{
int i,j;
// result[i][j] = 1 if there is a array[0..j-1] with sum = i
bool result[subsetSum+1][size+1];
// If subsetSum is 0, then answer is 1
for (i = 0; i <= size; i++) result[0][i] = 1;
// If subsetSum is not 0 and array is empty, then answer is 0
for (i = 1; i <= subsetSum; i++)
result[i][0] = 0;
// filling the result table
for (i = 1; i <= subsetSum; i++)
{
for (j = 1; j <= size; j++)
{
result[i][j] = result[i][j-1];
if (i >= array[j-1])
result[i][j] = result[i][j] || result[i - array[j-1]][j-1];
}
}
// return the value of subsetSum,size in result table
return result[subsetSum][size];
}
int main()
{
int i,sum = 0;
int array1[] = {5, 10, 6, 8, 1};
int n = sizeof(array1)/sizeof(array1[0]);
for (i = 0; i < n; ++i)
{
sum = sum + array1[i];
}
int subsetSum = sum/2;
if (partitionSum(array1, n, subsetSum) == 1)
printf(\"Yes, Subset exist\ \");
else
printf(\"Subset does not exist\ \");
// output: Yes, Subset exist
sum = 0;
int array2[] = {1, 5, 7, 34, 76, 54, 23, 19, 22, 81, 44, 77, 29, 40, 11, 42, 43, 31, 57, 61};
n = sizeof(array2)/sizeof(array2[0]);
for (i = 0; i < n; ++i)
{
sum = sum + array2[i];
}
subsetSum = sum/2;
if (partitionSum(array2, n, subsetSum) == 1)
printf(\"Yes, Subset exist\ \");
else
printf(\"Subset does not exist\ \");
// output: Yes, Subset exist
return 0;
}

