Count Distinct Hat Assignments and Maximize Hat Points

Read the full interview experience this question came from →

Quick Overview

Count valid one-hat-per-person assignments and maximize assigned-hat points with exact counts, unique hat use, and bitmask or backtracking reasoning.

Count Distinct Hat Assignments and Maximize Hat Points

Company: Roblox

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: hard

Interview Round: Onsite

Each person lists the hats they are willing to wear. Assign one acceptable hat to every person, using each hat at most once. Every hat also has a point value. Return both the total number of valid assignments and the maximum total points among valid assignments. Implement `hat_assignments(preferences: int[][], points: int[]) -> int[]`, returning `[number_of_assignments, maximum_points]`. ### Constraints & Assumptions - Hat IDs are `1` through `H`, where `H == len(points)` and `points[h-1]` is hat `h`'s point value. - `1 <= H <= 12`; there are 0 through 8 people. These small practice bounds allow an exact count without a modulus and keep results within signed 32-bit integers. - Each preference list contains distinct valid hat IDs and may be empty. - Hat points are nonnegative integers at most 1,000,000. An assignment's score is the sum of points of its assigned hats, counted once per used hat. - People are distinct, so exchanging two acceptable hats between people creates a different assignment even if the total points stay equal. - If no complete assignment exists, return `[0, -1]`. With no people, the one empty assignment has score zero, so return `[1, 0]`. - Do not count partial assignments or require every available hat to be used. ### Examples ```text preferences = [[1,2],[2,3]] points = [5,2,9] result = [3,14] ``` The assignments are `(1,2)`, `(1,3)`, and `(2,3)`. Their scores are 7, 14, and 11. ```text preferences = [[1],[1]] points = [8] result = [0,-1] ``` Explain how the counting state and maximum-score state are combined without counting an assignment twice. Compare bounded backtracking with a bitmask dynamic program under the stated small sizes. ```hint Separate ways from best score Two partial assignments may reach the same availability state. Their counts should be added, while their best achievable scores require a maximum rather than addition. ```

Overview: Count valid one-hat-per-person assignments and maximize assigned-hat points with exact counts, unique hat use, and bitmask or backtracking reasoning.

Read the full Roblox Software Engineer interview experience this question came from

|Home/Coding & Algorithms/Roblox
Roblox logo
Roblox
Sep 20, 2026
hardSoftware EngineerOnsiteCoding & Algorithms
0
0

Each person lists the hats they are willing to wear. Assign one acceptable hat to every person, using each hat at most once. Every hat also has a point value. Return both the total number of valid assignments and the maximum total points among valid assignments.

Implement hat_assignments(preferences: int[][], points: int[]) -> int[], returning [number_of_assignments, maximum_points].

Constraints & Assumptions

  • Hat IDs are 1 through H , where H == len(points) and points[h-1] is hat h 's point value.
  • 1 <= H <= 12 ; there are 0 through 8 people. These small practice bounds allow an exact count without a modulus and keep results within signed 32-bit integers.
  • Each preference list contains distinct valid hat IDs and may be empty.
  • Hat points are nonnegative integers at most 1,000,000. An assignment's score is the sum of points of its assigned hats, counted once per used hat.
  • People are distinct, so exchanging two acceptable hats between people creates a different assignment even if the total points stay equal.
  • If no complete assignment exists, return [0, -1] . With no people, the one empty assignment has score zero, so return [1, 0] .
  • Do not count partial assignments or require every available hat to be used.

Examples

preferences = [[1,2],[2,3]]
points = [5,2,9]
result = [3,14]

The assignments are (1,2), (1,3), and (2,3). Their scores are 7, 14, and 11.

preferences = [[1],[1]]
points = [8]
result = [0,-1]

Explain how the counting state and maximum-score state are combined without counting an assignment twice. Compare bounded backtracking with a bitmask dynamic program under the stated small sizes.

Submit Your Answer to Earn 20XP

Sign in to leave a comment

Loading comments...