我正在尝试解决此问题:https://www.urionlinejudge.com.br/judge/en/problems/view/1616
到了今年年底,拉斐尔终于毕业了计算课程。他的同学决定庆祝毕业举办舞会,现场音乐,美食和免费饮料。与所有球一样,最期望的时刻是每个人都开始成对跳舞。
两人将在男孩和女孩之间形成,就像拉斐尔的同学们很害羞,以至于他们决定提前计划将会。唯一的问题是:男孩比女孩多班级。这意味着,如果每个人至少都想跳舞一次,一个或多个女孩将不得不与一个以上的男孩跳舞。
[Rafael寻求您的帮助:这样所有男孩都只跳舞一次,所有女孩都跳舞至少跳舞一次
虽然可能存在数学上的封闭式解决方案,但我正在尝试使用动态编程来解决它。我不太能想到复发。有人可以指出我正确的方向吗?
这里需要的是从一组b
元素到一组g
元素的形容函数的数量。
存在一个通用公式,此处不一定需要。
可以直接获得一个简单的递归公式。
让我们假设我们知道S(b, g)
男孩和b
女孩的可能性g
。然后一个新男孩到了。我们要计算S(b+1, g)
。
我们有两种可能性:
g * S(b,g)
的可能性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
[实施此解决方案时,请注意不要多次计算相同的值,例如通过使用记忆。