这个基于组合的程序的可能算法是什么?

What can be a possible algorithm for this combinatorics based program?

所以,这次比赛已经结束了。

我正在尝试解决这个问题:http://codeforces.com/contest/554/problem/C

我花了大约 1 个小时来解决这个问题。我的想法是,用每种球填充阵列的最后 n 个位置。然后,在剩余位置中,通过计算数组中的剩余位置除以每种球 - 1(因为一个固定在最后一个位置)来找到排列。这显然会错过很多测试用例,因为我不考虑 2 个最大数字最终在一起或 3 个最大数字出现的情况。同样,除了 4 个数字之外,其他类似的数字也可能出现在它们之前。但是我的意思是,我想不出一个方法来解决这个问题?

任何输入将不胜感激。谢谢!

此外,比赛已经结束,所以没有问题。 :)

提示

考虑给出的示例,其中每种颜色有 1、2、3、4 个球。

放置第一个球:1个选项。

现在考虑放置下一种颜色的 2 个球。将一个放在任意位置(2 个选择 - 第一个球之前或之后),然后将第二个放在最后。

现在考虑放置下一种颜色的 3 个球。将两个放在任意位置C(1+2+2,2),最后一个放在最后。

最后考虑放置最终颜色的4个球。将三个放在任意位置C(1+2+3+3,3),最后一个放在最后。

这给出了 1680 个选择。