public static void Main()
var people = new int[] {100, 200, 150, 80};
Console.WriteLine(MinNumberOfBoats(new int[]{105},k));
Console.WriteLine(MinNumberOfBoats(new int[]{200,150,30},k));
Console.WriteLine(MinNumberOfBoats(new int[]{50,50,50,50,50,50,50},k));
Console.WriteLine(MinNumberOfBoats(people,k));
Console.WriteLine(MinNumberOfBoats(new int[]{150,200,150,30},k));
Console.WriteLine(MinNumberOfBoats(new int[]{205},k));
public static int MinNumberOfBoats(int[] people, int maxWeight)
if(people.Max() > maxWeight)
throw new InvalidOperationException("One or more people are too heavy for the boats, Find alternate means for them and try again");
(int idx, int v) max = (idx,0);
for (int i = idx+1; i < people.Length;i++)
var w = people[i]+people[idx];
if(w<=maxWeight && w>max.v)
people[idx+1] = people[max.idx];
if(idx+2 == people.Length)