diff --git a/go/most-profit-assigning-work.go b/go/most-profit-assigning-work.go new file mode 100644 index 0000000..e27ab95 --- /dev/null +++ b/go/most-profit-assigning-work.go @@ -0,0 +1,28 @@ +package main + +import ( + "slices" +) + +func maxProfitAssignment(difficulty []int, profit []int, worker []int) int { + maxAbility := slices.Max(worker) + jobs := make([]int, maxAbility+1) + + for i, d := range difficulty { + if d > maxAbility { + continue + } + jobs[d] = max(jobs[d], profit[i]) + } + + for i := 1; i <= maxAbility; i++ { + jobs[i] = max(jobs[i], jobs[i-1]) + } + + total := 0 + for _, ability := range worker { + total += jobs[ability] + } + + return total +}