If you have at most 31 states, you can use a color ramp to translate frame number to index:

The colors of the color ramp are not important, the important part is color swatch positions, and the alpha values:
- Since swatch positions can't be larger than 1, I divide the frame by 10, so that frame #3 becomes 0.3, which can be stored as a swatch position (keep in mind that frame #15 / 10 = 1.1, which can't be stored as a swatch position, so if you have 10 or more frames, divide by 100 instead). I also add a very small number to be sure I end up to the right of the corresponding swatch.
- Since the alpha value can be larger than 1, I just set the index as the alpha value.
So the swatches in this color ramp are:
- 0.1: alpha = 2
- 0.2: alpha = 5
- 0.3: alpha = 8
- 0.4: alpha = 11
- 0.5: alpha = 14
Finally I explicitly convert the outcome of the translation to integer to be sure the float inaccuracies don't bite me, then check against currently evaluated index and implicitly convert the false/true boolean to 0/1 integer which is the instance index in the supplied collection.

If you have more than 31 states, use a separate object which is a line of vertices, where each vertex index corresponds to frame number, and Z position corresponds to the index of the instance that should be lit. See this technique in How to instantiate objects on individual/selected points in geometry nodes?