Combinatorics
Various methods are available depending on how accurate you want to be and the sample space size. For fistfuls of dice, you can brute-force count them: manually, with a spreadsheet, or by writing custom bit of code (like anydice!).
So, for "the highest 2 of 3d10", we have a sample space of \$10^3\$ and an output range of 2-20. So we can get a:
- 2 in 1 way ([1,1,1]) = \$1 \over1000\$
- 3 in 3 ways ([2,1,1],[1,2,1],[1,1,2]) = \$3 \over1000\$
- 4 in 6 ways ([3,1,1],[1,3,1],[1,1,3],[2,2,1],[2,1,2],[1,2,2]) = \$6 \over1000\$
- ...
- 20 in 28 ways ([10,10,X],[10,X,10],[X,10,10] remembering to only count [10,10,10] once) = \$28 \over1000\$
Or you can use the formulas generated in response to this question on Math Stack Exchange - be warned, serious mathematics ahead:
Disadvantage is simply the mirror-image of advantage, so once you solved for one, the probabilities apply in the reverse order to the other.