Este problema es una aplicación directa de la Enumeración de Polya
Teorema. Supongamos que tratamos el caso de $r$ bolas rojas, $g$ bolas verdes
y $b$ bolas de color azul y $n$ indistinguible recipientes donde no hay contenedores son
a la izquierda vacía.
Recordar la recurrencia por Lovasz para el ciclo de índice $Z(P_n)$ de
el conjunto operador $\mathfrak{P}_{=n}$ $n$ ranuras, que es
$A$Z(P_n) = \frac{1}{n} \sum_{i=1}^n (-1)^{l-1} a_l Z(P_{n-l})
\quad\text{donde}\quad
Z(P_0) = 1.$$
Necesitamos emplear el operador de conjuntos debido a que los elementos de una distribución
se supone que para ser único.
Tenemos por ejemplo,
$$Z(P_3) = 1/6\,{a_{{1}}}^{3}-1/2\,a_{{2}}a_{{1}}+1/3\,a_{{3}}$$
y
$A$Z(P_4) = 1/24\,{a_{{1}}}^{4}-1/4\,a_{{2}}{a_{{1}}}^{2}
+1/3\,a_{{3}}a_{{1}}+1/8\,{a_{{2}}}^{2}-1/4\,a_{{4}}.$$
La aplicación de la PET y la TARTA ahora sigue casi por la inspección, que el
deseado contar está dada por el término
$$\sum_{q=1}^n (-1)^{n-q} [R^r G^g B^b]
Z(P_q)\left(\frac{1}{1-R}\frac{1}{1-G}\frac{1}{1-B}\right).$$
Necesitamos emplear el PASTEL de aquí porque el sustituido ciclo del índice
incluyen ranuras vacías, que no estamos contando en este problema.
Como un ejemplo de lo que estos sustituido ciclo de índices de aspecto
considere la posibilidad de
$A$Z(P_3)\left(\frac{1}{1-R}\frac{1}{1-G}\frac{1}{1-B}\right)
\\ =
1/6\,{\frac {1}{ \left( 1-R \right) ^{3} \left( 1-G \right) ^{3} \left( 1-B
\right) ^{3}}}
\\-1/2\,{\frac {1}{ \left( -{R}^{2}+1 \right) \left( -{G}^{2}+1
\right) \left( -{B}^{2}+1 \right) \left( 1-R \right) \left( 1-G \right)
\left( 1-B \right) }}
\\+1/3\,{\frac {1}{ \left( -{R}^{3}+1 \right) \left( -{G
}^{3}+1 \right) \left( -{B}^{3}+1 \right) }}
.$$
Debe quedar claro que el coeficiente de extracción de aquí es rápido y
eficiente utilizando el binomio de Newton de la serie que dice que
$$[P^{\mu k}] \left(\frac{1}{1-P^\mu}\right)^\nu
= {k+\nu-1\elegir \nu-1}.$$
La respuesta de ocho rojas, seis verde y siete bolas de color azul en cuatro
indistinguible contenedores resulta ser
$$60040.$$
El siguiente Arce código implementa dos rutinas, q1y
q2. El primero de estos calcula el valor de $(r,g,b)$ $n$ por
la fuerza bruta (enumerar todas las configuraciones) y puede ser usado para verificar
la corrección de la MASCOTA de la fórmula para pequeños valores de los parámetros.
El segundo utiliza la MASCOTA para el instante de cálculo de la deseada
coeficiente.
Observar que podemos calcular los valores que están completamente fuera del alcance de los
la fuerza bruta de la enumeración, por ejemplo, con diez bolas de cada color y cinco
papeleras obtenemos
$$7098688.$$
Con veinte bolas de cada color y seis bandejas tenemos
$$194589338219.$$
con(planta);
pet_cycleind_set :=
proc(n)
opción de recordar;
si n=0 entonces devolver 1; fi;
ampliar(1/n*
agregar((-1)^(l-1)*[l]*pet_cycleind_set(n-l), l=1..n));
end;
pet_varinto_cind :=
proc(poli, ind)
local subs1, subs2, polyvars, indvars, v, bote, res;
res := ind;
polyvars := indets(poli);
indvars := indets(ind);
para v en indvars ¿
bote := op(1, v);
subs1 :=
[seq(polyvars[k]=polyvars[k]^olla,
k=1..nops(polyvars))];
subs2 := [v=subs(subs1, poli)];
res := subs(subs2, res);
od;
res;
end;
allparts :=
proc(val, tamaño)
opción de recordar;
local de res, els, p, pp, p;
res := [];
para p en la partición(val) ¿
si nops(p) <= tamaño de la entonces
pp := [seq(q, p),
seq(0, q=1..(tamaño-nops(p)))];
res := [op(res), pp];
fi;
od;
res;
end;
p1 :=
proc(RC, GC, BC, n)
opción de recordar;
local p, p, pr, pg, pb, res,
sr, sg, sb, dist;
pr := [];
para p en allparts(RC, n) hacer
pr := [op(pr), seq(q, q en permutar(p))];
od;
pg := [];
para p en allparts(GC, n) hacer
pg := [op(pg), seq(q, q en permutar(p))];
od;
pb := [];
para p en allparts(BC, n) hacer
pb := [op(pb), seq(q, q en permutar(p))];
od;
res := {};
para sr en pr ¿
para la sg en pg hacer
para sb pb hacer
dist :=
{seq(R^sr[pos]*G^sg[pos]*B^sb[pos],
pos=1..n)};
si nops(dist) = n y
no miembro(1, dist), a continuación,
res := res de la unión {dist};
fi;
od;
od;
od;
nops(res);
end;
p2 :=
proc(RC, GC, BC, n)
opción de recordar;
local de els, vals, sind;
vals := [];
para los estudiantes que n
sind :=
pet_varinto_cind(1/(1-R)/(1-G)/(1-B),
pet_cycleind_set(els));
vals :=
[op(vals),
coeftayl(
coeftayl(
coeftayl(sind, R=0, RC),
G=0, GC),
B=0, BC)];
od;
agregar(vals[els]*(-1)^(n-els), els=1..n);
end;