recursive maximal combination

i got a bag which can take "n" kilograms inside of him

and i have a list of items in which each item has a different weight.

i need to calculate a combination for which it will fill the bag as much as it could

without passing the n kilograms mark.

i got a function which calculates if amongnt the array we have a combination

which sum equals n (S=n)

how to change it so it will calculate a combination for which it will fill the bag as much as it could

without passing the n kilograms mark. S<=n

??

Code:

`#include <stdio.h>`

void printArr(int arr[], int n)

{

int i ;

puts("");

for (i=0; i<n; i++)

printf (" %d",arr[i]);

puts("");

}

int SubsetSum(int arr[], int n, int S, int subseq[],int count)

{

int withCurrent, withoutCurrent;

if (S==0)

{

printArr(subseq,count);

return 1;

}

if (S< 0 || !n)

return 0;

subseq[count] = arr[0];

withCurrent = SubsetSum(arr+1,n-1,S-arr[0],subseq, count+1);

withoutCurrent= SubsetSum(arr+1,n-1,S,subseq,count);

return (withoutCurrent || withCurrent);

}

void main()

{

int arr[] = {7, 6, 5,1,7,13,17}, subseq[8];

int S = 14,arrSize = 7;

if (!SubsetSum(arr,arrSize,S,subseq,0))

printf("\nThere is no subsequence\n");

}