for N = 1 to 100
for k = 0 to 100
if 2*k <= N then F[N][k] = 1 {play safe}
elseif k > N then F[N][k] = 0 {impossible to get more right answers than prisoners}
elseif k = N then F[N][k] = 0.5 {gambling to get all correct}
else
F[N][k] = (F[N-1][k-1] + F[N-1][k]) / 2 {one player could "gamble", and the other N-1 could optimize accordingly}
x = (F[N-2][k-2] + F[N-2][k]) / 2 {two players could gamble, and the other N-2 could optimize accordingly}
if x > F[N][k] then F[N][k] = x {update if impovement}
if F[N-2][k-1] > F[N][k] then F[N][k] = F[N-2][k-1] {update if letting two prisoners play safe is an improvement}
if N > 3 then
{try letting three players play according to different strategies}
x = (F[N-3][k-3] + F[N-3][k]) / 2 {let all three gamble}
if x > F[N][k] then F[N][k] = x {update if improvement}
x = (F[N-3][k-2] + F[N-3][k-1]) / 2 {let two of them play safe; the third picks a pre-selected color}
if x > F[N][k] then F[N][k] = x {update if improvement}
x = (F[N-3][k-3] + 3 * F[N-3][k-1]) / 4 {the three players maximize the chance of getting 2 right}
if x > F[N][k] then F[N][k] = x {update if improvement}
x = (3 * F[N-3][k - 2] + F[N-3][k]) / 4 {opposite of last strategy}
if x > F[N][k] then F[N][k] = x {update if improvement}
endif
if (N > 4) and (k > 3) then
{let four players guess the most numerous color among them, or the opposite strategy}
x = (F[N-4][k-4] + 4 * F[N-4][k-3] + 3 * F[N-4][k]) / 8
if x > F[N][k] then F[N][k] = x
x = (3 * F[N-4][k-4] + 4 * F[N-4][k-1] + F[N-4][k]) / 8
if x > F[N][k] then F[N][k] = x
endif
{Then same (most/least numerous color) for 6 and 8 players - details left out}
for i = 1 to k
x = (F[N-i][k-i] + F[N-i][k]) / 2 {let any number of prisoners gamble, then play accordingly}
if x > F[N][k] then F[N][k] = x
next i
for j = 2 to N
if j|N and j|k then
x = F[N/j][k/j] {partition the prisoners into blocks of j people who always "gamble" together}
if x > F[N][k] then F[N][k] = x
next j
for i 0 = ceiling(k/2) to floor((N-1)/2)
x = (1+F[N-2*i][k-i]) / 2 {play safe with i players if that is enough, otherwise gamble}
if x > F[N][k] then F[N][k] = x
next i
endif
next k
next N
If there are errors, then it is possible that they appeared when I typed here, and that they are not in the actual code.
It is possible that there exist strategies for only 4 players that could lead to further improvements. If I have calculated correctly, then if we could attain distributions of 0-10-0-2-4, 0-10-1-0-5, 4-2-0-10-0 and 5-0-1-10-0 for 0, 1, 2, 3 and 4 correct answers, then all other distributions would lie in the convex hull of the ones we have found, and they would give improvements for F[10][6] and F[100][51]. Alas, I did not find any examples of these after running a few thousand simulations.