package main import ( "cmp" "slices" pq "github.com/emirpasic/gods/v2/queues/priorityqueue" ) type Project struct { capital int profit int } func byCapital(a, b Project) int { return cmp.Compare(a.capital, b.capital) } func revCmp[T cmp.Ordered](x, y T) int { return -cmp.Compare(x, y) } func findMaximizedCapital(k int, w int, profits []int, capital []int) int { // construct the list of projects projects := make([]Project, len(profits)) for i, _ := range profits { projects[i] = Project{capital: capital[i], profit: profits[i]} } slices.SortFunc(projects, byCapital) queue := pq.NewWith[int](revCmp) i := 0 for range k { // add the affordable projects to the queue for i < len(projects) && projects[i].capital <= w { queue.Enqueue(projects[i].profit) i++ } // invest into the currently most profitable project profit, ok := queue.Dequeue() if !ok { // ran out of the available projects break } // collect the profit w += profit } return w }