There are $4\choose2$ ways that two repairers can be chosen, and then there are $4\brace2$ ways that the two chosen repairers can be assigned to repair four televisions. Here $4\brace2$ is the Stirling number of the second kind, which may be read as "four subset two".
The Stirling number gives us the number of ways to break four labelled items into two non-empty unlabelled subsets. Let's say we call the customers a, b, c, and d, then we can break them up as
- {{a},{b,c,d}}
- {{a,c,d},{b}}
- {{a,b,d},{c}}
- {{a,b,c},{d}}
- {{a,b},{c,d}}
- {{a,c},{b,d}}
- {{a,d},{b,c}}
So in this case, ${4\brace2}=7$ and this is multiplied by 2 since each pair of subsets of customers can go to either of the two repairers.
This is the origin of the $2^4-2=14$ term. Another way to see this is that you can break up the sets of televisions in sixteen different ways, but two of those ways are of the form {{a,b,c,d},$\emptyset$}, in the above notation, and result in one of the repairmen not being assigned, and the other being assigned all four, which contradicts that two people were chosen.
So the overall probability is
$$
p={{4\choose2}{4\brace2}2\over4^4}={84\over256}
$$
In case you don't believe this or think it is all mumbo-jumbo, here is a computer program which explicitly counts all the ways:
package main
import "fmt"
func main() {
verbose := false
nPairs := 0
for a := 0; a < 4; a++ {
for b := 0; b < 4; b++ {
for c := 0; c < 4; c++ {
for d := 0; d < 4; d++ {
val := []int{a, b, c, d}
vals := make([]int, 4)
for i := 0; i < 4; i++ {
vals[val[i]]++
}
pairs := 0
triples := 0
for i := 0; i < 4; i++ {
if vals[i] == 2 {
pairs++
}
if vals[i] == 3 {
triples++
}
}
if pairs == 2 {
if verbose {
fmt.Printf("pairs %v\n", val)
}
nPairs++
}
if triples == 1 {
if verbose {
fmt.Printf("triples %v\n", val)
}
nPairs++
}
}
}
}
}
fmt.Printf("%d\n", nPairs)
}
Run it online here.
There is a variable called verbose which, if set to true, will print all the pairs for you.