所以我在业余时间一直在研究一个问题而且我被卡住了。这是我在的地方。我有一个数字40.它代表球员。我已经获得了其他数字39,38,...... 10.这些代表前30名球员的得分(1-30)。其余的球员(31-40)有一些未知的得分。我想要做的是找出有多少分数组合与给定数据一致。
所以换一个更简单的例子:如果你有3名球员。一个得分为1.然后得分的可能组合的数量是3(0,2; 2,0; 1,1),其中(a,b)代表玩家1和玩家2的胜利数量, 分别。 (3,0)的组合不起作用,因为没有人可以获得3胜。 (0,0)也不会起作用,因为我们需要总共3次胜利(并且不会得到0,0)。
我找到了可能的游戏总数。这是所玩游戏的总数,这意味着它是总获胜次数。 (没有关系。)最后,我有一个变量用于每位玩家的最大胜利(比玩家总数少一个。没有玩家可以拥有更多。)
我尝试通过向每位玩家展开N次胜利然后减去不符合标准的组合来找到唯一组合的数量。例如,要想出很多方法可以给5个人带来10次胜利,每个人的胜利不超过4次,你可以使用: C(14,4) - C(5,1)* C(9,4)+ C(5,2)* C(4,4)= 381.C(14,4)来自式C(n) + k-1,k-1)(谷歌条和条,我相信)。接下来是用5(不允许)取出那些,但加上我们减去两次的那些。
是的,必须有一个更简单的方法。最后,这些数字变得如此之大,以至于我不确定我的电脑是否可以充分处理它们。我们谈论的是C(780,39),即1.15495183×10 ^ 66。无论如何,应该有更好的方法来做到这一点。
总结一下,你有40个人。前30个人的得分是10-39。最后十个人得分不明。你可以产生多少分数符合标准:所有分数加起来可能总胜利,每个玩家不会获得39胜。
思考?
答案 0 :(得分:2)
由于问题更多是关于数学,但仍然在编程QA网站上,让我给你一个部分解决方案,使用符号代数(如Maple of Mathematica)解决许多这些问题。我强烈建议你拿一本介绍组合书,这些问题都在那里得到解答。
首先,前30名球员得分10-39(总成绩为735)有点像红鲱鱼 - 我们想做的就是解决其他问题,其余10名球员的得分可能在(0 ... 39)之间。
如果我们将球员的可能得分视为多项式:
f(x) = x^0 + x^1 + x^2 + ... x^39
例如,如果x ^ 2的值是2的分数,请考虑这是什么
f(x)^10
这代表所有10名球员的综合得分,即。 x^385
的系数是2002年,它代表了这样一个事实,即有10个球员获得385分的2002年方法.Wolfram Alpha(编程语言IMO)can evaluate this for us。
如果您想知道有多少可能的方法,只需在表达式x=1
中替换8,140,406,085,191,601,恰好是39 ^ 10(毫不奇怪!)
虽然我知道有些人为一个可以在纸上解决的简单问题设置所有这些机器似乎很愚蠢 - generating functions的方法在问题变得混乱时很有用(并且可以进行渐近分析) )。考虑同样的问题,但现在我们限制玩家只得分素数(2,3,5,7,11,...)。有多少种可能的方法可以让10个人得到一个特定的数字,比如344?只需修改您的f(x)
:
f(x) = x^2 + x^3 + x^5 + x^7 + x^11 ...
并重复这个过程! (I get [x^344]f(x)^10 = 1390
)。