如何计算用不同颜色精确绘制不同球的方法?

时间:2016-10-10 10:13:06

标签: c++ algorithm math combinations dynamic-programming

我最近遇到了一个问题。

假设f(n,c)=用不同的颜色绘制n个不同球的方法。 (注意所有c颜色必须至少使用一次,每个球被认为是不同的)

对于这个问题,我需要计算所有f(n,c),其中1< = c< = n< = S mod 1e9 + 7。

对于原始问题,S = 200。所以我制作了一个O(S ^ 3)解决方案,如下所示:

+----+-------+
| Id | Score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+

但我想可能有一些方法可以在O(S ^ 2)中解决它。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

这是inclusion exclusion principle的典型应用程序。让我们用f(n, k)来表示用高达 k种颜色(原始c颜色)和g(n, k)颜色n种颜色的方法对n球进行着色的方法数量n个球具有完全 k种颜色(原始c颜色之外)。然后是g(n, k) = f(n, k) - f(n, k - 1) + f(n, k - 2) - ...。计算用最多k种颜色对球进行着色的方法要容易得多 - 实际上这个公式很简单,但我会留给你弄清楚它是什么。

最后你要找的数字是g(n,c),可以用上面的公式计算。