找到从包含三种类型A,B,C三种球的球袋中取出的最小球数,使得n个球类型相同

时间:2016-04-03 09:12:23

标签: c++ algorithm combinatorics

E.g。让我们假设我们有1个A型球,2个B型球和3个C型球。 然后我们必须从袋子中取出的最小球数,以确保至少2个球将是相同类型的是“4”(每个球一个,第一个和第四个球可以是B或C型) )。

我们怎样才能找到至少n个球的数量相同的球。

2 个答案:

答案 0 :(得分:1)

tldr; -(2*N-2*N*M-3*M+M*M)/2

如果你有

A, 2B, 3C...

你可以画出来:

1    C B A
2    C B
3    C

您的最低人数为2,将填写lvl1 + 1

1   D C B A
2   D C B
3   D C
4   D

现在2个球的最小值是4 + 1 = 5,而lvl 3是3 + 4 + 1 = 8

要达到具有N个字母的lvl M,循环为:

for (B=1,n=0; n<M-1; n++)
    B+=N-n;

这个的一般数学表示是:

That's equal to

可以扩展为:

-(2*N-2*N*M-3*M+M*M)/2

答案 1 :(得分:0)

为了解决这个问题,一个简单的方法就可以了。只需将所有数量小于n的球(即相同类型的球的最小数量)加起来。然后从所有剩余的球中加起来(n - 1)。您的答案将是总和+1。

考虑一个例子,假设你有10个A型球,15个B型球,20个C型球,你想要至少16个相同颜色的球。该方法表示将所有计数小于n的球加起来,即16 ..因此,总和为10 + 15 = 25.现在为所有剩余类型的球添加(n - 1),即仅键入C.因此sum =因此,你需要绘制至少16个球的最小球是 sum + 1 = 41