简单组合:元素配对的方式数目

问题描述 投票:-3回答:1

我正在尝试解决此问题:https://www.urionlinejudge.com.br/judge/en/problems/view/1616

到了今年年底,拉斐尔终于毕业了计算课程。他的同学决定庆祝毕业举办舞会,现场音乐,美食和免费饮料。与所有球一样,最期望的时刻是每个人都开始成对跳舞。

两人将在男孩和女孩之间形成,就像拉斐尔的同学们很害羞,以至于他们决定提前计划将会。唯一的问题是:男孩比女孩多班级。这意味着,如果每个人至少都想跳舞一次,一个或多个女孩将不得不与一个以上的男孩跳舞。

[Rafael寻求您的帮助:这样所有男孩都只跳舞一次,所有女孩都跳舞至少跳舞一次

虽然可能存在数学上的封闭式解决方案,但我正在尝试使用动态编程来解决它。我不太能想到复发。有人可以指出我正确的方向吗?

algorithm combinations dynamic-programming combinatorics
1个回答
2
投票

这里需要的是从一组b元素到一组g元素的形容函数的数量。

存在一个通用公式,此处不一定需要。

可以直接获得一个简单的递归公式。

让我们假设我们知道S(b, g)男孩和b女孩的可能性g。然后一个新男孩到了。我们要计算S(b+1, g)

我们有两种可能性:

  1. 将这个新男孩与一个已经有至少一个伴侣的女孩配对->我们得到g * S(b,g)的可能性
  2. [以独占方式将这个新男孩与一个女孩配对->我们获得了g * S(b, g-1)的可能性

最后,我们得到了递归关系

 S(b, g) = g * (S(b-1, g) + S(b-1, g-1))

当以递归方式实现解决方案时,我们必须考虑:

S(b=g, g) = g!
S(b, 1) = 1

[实施此解决方案时,请注意不要多次计算相同的值,例如通过使用记忆。

© www.soinside.com 2019 - 2024. All rights reserved.