• + 0 comments

    solution using C with recursion function. What I did here is to try to get every possible combination in an optimal way because there is no other way to know the highest possible sum because there are no limits on the numbers used to get this sum. So for each element in the array, start from the first index and get the maximum sum using it. Store this sum, and each time, reduce this sum by the value in the specific index. and pass this sum to the next index. and do it recursively for all indexes.

    for main function issues, just do a for loop t times from char** first_multiple_input = split_string(rtrim(readline())); until fprintf(fptr, "%d\n", result);

    the code :

    int cumulative_sum(int* arr , int arr_count ,int  k ,int index , int sum)
    {
        if(index == arr_count)
        {
            return sum;
        }
        else if( k%arr[index] == 0)
        {
            return k;
        }
        int max_sum = 0 , temp = 0 , count = 0 ,  i = 0;
        while (sum <= k) {
            sum += arr[index];
            count++;
        }
        sum -= arr[index];
        max_sum = sum;
        
        for (i = 0 ; i< count ; i++) {
            temp = cumulative_sum(arr , arr_count , k , index+1 , sum);
            if(temp == k)
            {
                return k;
            }
            else if(temp > max_sum)
            {
                max_sum = temp;
            }
            sum -= arr[index];
        }
        
        return max_sum;
    }
    
    /*
     * Complete the 'unboundedKnapsack' function below.
     *
     * The function is expected to return an INTEGER.
     * The function accepts following parameters:
     *  1. INTEGER k
     *  2. INTEGER_ARRAY arr
     */
    
    int unboundedKnapsack(int k, int arr_count, int* arr) {
    
        return cumulative_sum(arr,arr_count,k,0,0);
    
    }