Didn't find any similar question about this. This is a final round Facebook question:

You are given a ring of boxes. Each box has a non-negative number on it, can be duplicate.

Write a function/algorithm that will tell you the order at which you select the boxes, that will give you the max sum.

The catch is, if you select a box, it is taken off the ring, and so are the two boxes next to it (to the right and the left of the one you selected).

so if I have a ring of
{10 3 8 12}

If I select 12, 8 and 10 will be destroyed and you are left with 3.

The max will be selecting 8 first then 10, or 10 first then 8.

I tried re-assign the boxes their value by take its own value and then subtracts the two next to is as the cost.

So the old ring is {10 3 8 12}

the new ring is {-5, -15, -7, -6}, and I will pick the highest.

However, this definitely doesn't work if you have { 10, 19, 10, 0}, you should take the two 10s, but the algorithm will take the 19 and 0.

Help please?

It is most likely dynamic programming, but I don't know how.

The ring can be any size.

Edit
Report