Topcoder上的数学题

前几天上Topcoder,第二个题(Lottery)就让我比较郁闷。

输入是一些彩票的描述,有名字、可选数字、空格数、是否有序、是否唯一这些项目,有多种彩票,以字符串数组类型输入,要求在输出中按照各种彩票的可能个数大小对这些彩票排序。给定可选数字n,空格数m,则问题就是在1, 2, … , n中选择m个来填空,并按照是否有序(非降序,如:1,2,2,3)、是否允许重复的限制来计算可能的答案数。

这其实就不算个算法题。首先就是要分析输入字符串,生成可以操作的问题对象(需要定义类),考察的是对语言运用的熟练程度。然后要根据问题限制求出排列数,考察的是对排列组合的掌握。最后是排序,如果用Java,实现一个Comparable接口,还是写一个实现了Comarator接口的类,随便了,不过前一个更方便。如果用C++,那么就写一个回调函数。这考察的又是语言。

Lottery problem可怜我就在排列组合那里出了问题。现在每次遇到数学问题的时候就没信心,总是觉得学得太差了,好像以前学过的东西都忘了。这个问题,如果不考虑是否有序的话还算简单,很容易想出来,但是考虑到有序,就不知道从何处下手了。

问了一下数学比较牛的xl,他马上给出了答案。

Lottery问题解的个数
是否有序 是否允许重复 答案数
F T n^m
F F P_n^m
T T C_{n+m-1}^m
T F C_n^m

我问的是后两种情况,最后一种给出答案我就明白了,n个数里取出m个,按顺序就只有一种放法了。第三种情况,他说也是猜的,看来数学好,感觉也是对的。后来在Wikipedia上找到了解释,这是个很普通的问题吗?我没想到会很容易在上面找到该问题的解释,呵呵。那里已经给出了非常好的讲解,这里就不再赘述了。挺有意思的,自己凭空想,怎么也想不明白是怎么回事。

This entry was posted on Sunday, November 12th, 2006 at 10:24 pm and is filed under Algorithm. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Comments »

Comment by Zhang
2006-11-15 09:37:18

你也做topCoder啊,前段时间我也做了一下,拿了50美金,不过要身份验证,最后钱也没拿到 :(

这个空间挺快的,在哪的?

Comment by zhouqb
2006-11-15 12:19:02

我也不太清楚topcoder是怎么运作的,就是上去做了两道题,呵呵,以后想多巩固一下算法,上去练习练习。不知道还有钱:-),就是在国内想收国外的钱挺不方便的
这个空间是meyu.net的,是移动还是联通的,忘了:)好像速度是不错

 
 
Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)

Please copy the string 6OLcoy to the field below: