Here's an algorithmic challenge for you,
I have a list of [0..100]
pairs of numbers and I need to find the maximum number of unique "left number" while making sure there is no more than 3 of the "right number".
Here's an example
(1, 1)
(2, 1)
(3, 1)
(4, 1)
(5, 1)
(6, 1)
(7, 1)
(1, 2)
(4, 2)
(1, 3)
(2, 3)
(5, 4)
And the result would be: 7. We would take: (3, 1)
, (6, 1)
, (7, 1)
, (1, 2)
, (4, 2)
, (2, 3)
and (5, 4)
.
For whatever reason I can't seem to find any other way than brute forcing it...
Any help is greatly appreciated :)
You can express this problem as a maximum flow problem:
Make edges of capacity 1 from a source node to each of your left numbers.
Make edges of capacity 3 from each of your right numbers to a sink node.
Make edges of capacity 1 from left number a to right number b for each pair of the form (a, b).
Compute the maximum flow in this network from source to sink.