


Array index 'i' denotes the cost of (i+1)kg packet.
Example: cost[0] is the cost of a 1kg packet of oranges.
The first line of each test case contains two single space-separated integers 'N' and 'W' where 'N' denotes the size of the array/list(cost), and 'W' is the bag's size.
The second line of each test case contains 'N' single space-separated integers denoting the values of the cost.
Print the minimum cost to buy exactly W kg oranges. If it's impossible, print "-1".
You are not required to print anything, it has already been taken care of. Just implement the function.
1 <= N <= 1000
1 <= W <= 1000
-1 <= cost[i] <= 1000000
Time Limit: 1sec
Write a recursive function minCostToBuyOrangesHelper(idx, requiredWeight, n) to return the Minimum cost to buy exactly requiredWeight Kg oranges with (idx+1) Kg to N kg packets.
cost[idx] + minCostToBuyOrangesHelper(idx, requiredWeight - (idx + 1), n, cost)2. The option of skipping this packet and moving to the next packet:
minCostToBuyOrangesHelper(idx + 1, requiredWeight, n, cost)3. We will take the minimum of these two options as the minimum cost for instant minCostToBuyOrangesHelper(idx, requiredWeight, n)
4. Base cases are:
minCostToBuyOrangesHelper(idx + 1, requiredWeight, n, cost)We will write a recursive function minCostToBuyOrangesHelper(idx, requiredWeight, n) to return the Minimum cost to buy exactly requiredWeight Kg oranges with (idx+1) Kg to N kg packets. Then we will use a Dynamic Programming approach to memoize the calls in a DP matrix minCost[idx][requiredWeight] which will save the results of calls and will return the result when we again try to call for the same values.
Our minimum cost for weight W will be : minCostToBuyOrangesHelper(idx, W, n)cost[idx] + minCostToBuyOrangesHelper(idx, requiredWeight - (idx + 1), n, cost)minCostToBuyOrangesHelper(idx + 1, requiredWeight, n, cost)minCostToBuyOrangesHelper(idx + 1, requiredWeight, n, cost)5. Before returning the answer, store it in the dp array.
We will write an iterative DP where minCost[i][j] denotes the minimum cost of buying exactly 'j' kg Oranges with 1 to 'i’ kg packets of oranges.
minCost[i][j] = minCost[i - 1][j]
minCost[i][j] = minCost[i - 1][j];
2. If i <= j get minimum cost either by including it or excluding it:
minCost[i][j] = min(minCost[i - 1][j], minCost[i][j - i] + cost[i - 1]);
3. So finally we have our minimum cost in minCost[n][w]. If it’s equal to INF (Max Value), then return -1 else return the result.
We will write an iterative DP using 1D DP array where minCost[i] denotes Minimum cost of buying exactly 'i' kg Oranges with all the packets of oranges.
continue without changing minCost as they can’t contribute to minimizing cost.
continue without changing minCost as they can’t contribute to minimizing cost.
2. If i <= j get minimum cost either by including it or excluding it:
minCost[i] = min(minCost[i], minCost[i - j] + cost[j - 1]);
3. So finally we have our minimum cost in minCost[w]. If it’s equal to INF (Max Value), then return -1 else return the result.