我试图解决这个 TopCoder 问题: http: //community.topcoder.com/stat ?c=problem_statement&pm=10863&rd=14150
但是,我的解决方案不好,我不明白为什么。
我了解那里给出的解决方案(下页:寻找 LotteryPyaterochka):http ://apps.topcoder.com/wiki/display/tc/SRM+466
所以,总结一下我的问题:
我们正在玩一种特殊的彩票:
该彩票中的每张彩票都是一个 N 行 5 列的矩形网格,其中每个单元格包含一个介于 1 和 5*N 之间的整数,包括 1 和 5*N。一张票中的所有整数都是不同的。
彩票组织者随机选择 5 个不同的整数,每个整数介于 1 和 5*N 之间,包括 1 和 5*N。5 个整数的每个可能子集都具有相同的被选中概率。这些整数被称为中奖号码。当且仅当彩票有一行包含至少 3 个中奖号码时,该彩票才被视为中奖。
我们想知道中奖号码(因此,在同一行中至少有 3 个中奖号码)
所以,我坚持以下步骤:
选择出现在“中奖行”中的 5 个数字的方法数。
topCoder 解决方案说:
(#选择“中奖行”中出现的 5 个数字的方法)=
(#选择出现在“中奖行”中的x个中奖号码的方法) * (#选择5-x个“未中奖号码”的方法) =
(5 选择 x) * ((5N-5) 选择 (5-x))
由于该行中的中奖号码至少为 3,x 可以是 3 或 4 或 5。所以,我们有 (#ways of selection 出现在“中奖行”中的 5 个数字) =
(5选3)*((5N-5)选2)+(5选4)*((5N-5)选1)+(5选5)*((5N-5)选0))
我说的是:
(#选择“中奖行”中出现的 5 个数字的方法)=
(5个中奖号码中的3个号码)*(5N-5个未中奖号码中的2个完成行选择+之前未选择的2个中奖号码)=
(5N 选择 3) * ((5N-3)选择 2)
对于 N = 10,我的方法给出:(5 选择 3)*(47 选择 2)= 10810
而topcoder方法给出:((5选3) (45选2)+(5选4) (45选1)+(5选5)*(45选0))=10126
为什么我的方法不对?
谢谢