我试图解决这个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之间的整数。单个票证中的所有整数都是不同的。
彩票组织者随机选择5个不同的整数,每个整数在1到5 * N之间。 5个整数的每个可能子集具有相同的被选择概率。这些整数称为中奖号码。当且仅当它包含至少包含3个中奖号码的行时,票证才被视为赢家。
我们想知道中奖彩票的数量(因此,在同一行中至少有3个中奖号码)
所以,我坚持了以下步骤:
选择出现在“获胜行”中的5个数字的多种方式。
topCoder解决方案说:
(#选择出现在'获胜行'中的5个数字的方式)=
(#选择出现在'获胜行'中的x中奖号码的方式)*(选择5-x'非中奖号码的#路径)=
(5选择x)*((5N-5)选择(5-x))
由于此行中的中奖号码数至少为3,因此x可以是3或4或5.所以,我们有 (选择出现在“获胜行”中的5个数字的#)=
(5选3)*((5N-5)选择2)+(5选4)*((5N-5)选择1)+(5选5)*((5N-5)选择0) )
我说的话:
(#选择出现在'获胜行'中的5个数字的方式)=
(5个中奖号码中的3个号码)*(2个号码完成5N-5非中奖号码中选择的行+之前未选择的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
为什么我的方法错了?
由于
答案 0 :(得分:2)
让我们说中奖号码是1,2,3,4和5.现在让我们看一下包含获胜行中所有五个号码的票证。
您的方法多次计算该票证,因为它包含在以下计数中:
1 2 3 + two other numbers
1 2 4 + two other numbers
1 2 5 + two other numbers
1 3 4 + two other numbers
...
同样的事情发生在有四个中奖号码的门票上。
这就是为什么这些案件需要单独计算的原因。