This problem seems pretty much like I had a couple of years ago at my job. If performance is important, or
the calculation need to be done quickly, I would suggest to use genetic algorithm. If there is a lot of player, let's say 1000, the brute force calculation (when you calculate all the possible way) can take a long time. However genetic algorithm doesn't guarantee the best solution always (most of the time it does), but it can give a pretty good approximation. But if the computer have enough time, I can give you a multi-thread solution with brute force algorithm. I am experienced with datastructures and algorithms in parallel environment so none of these two solution should be a problem for me.
I reply to all my emails in 1-2 hour and you can reach me on Skype nearly 24/7. If you like my idea or have further questions please do not hesitate to contact me.