Northeastern Europe 2007, Northern Subregion History Of Football

来源:互联网 发布:大数据调查企业 编辑:程序博客网 时间:2024/06/04 18:46

【题目描述】

n只球队打锦标赛,两两之间进行一场比赛,胜积3分,平积1分,负积0分,现在给出n只球队最后的得分,问可能的比赛结果有多少种?

 

【输入输出】

n (2 <= n <= 8)

n行,每行一个整数,表示某队的得分

输出可能的结果数

 

下面是样例

3

3

3

3

 

2

-------------------------------

Possible table number 1 TeamABCPointsA-303B0-33C30-3

 

Possible table number 2

TeamABCPointsA-033B3-03C03-3

 

【题目分析】

看到这么小的n,很自然的想到枚举,每场比赛有三种结果,枚举每场比赛的结果的话,不太现实。

可以先拿出来一个球队,枚举这个球队和剩下的n - 1支球队的战绩,然后就可以假设把这支球队删掉,然后递归求解n - 1支球队,n = 2的时候为递归的出口。

这样的话,就可以用记忆化来剪枝,如果有n个球队的得分表为table的种数已经计算过了,就存在map里备用。

按这个思想敲了下代码,跑了下

8
10
10
10
10
10
10
10
10

这组数据,花了20S,好在结果是正确的。

优化。。。

1. n支球队的得分表是没有顺序,所以先排个序(升序)。

2. 在1的基础上,我们先枚举得分最少的那个队,如果这个队的得分是0,那么很明显,它都输了,这样就省得枚举了,而且这个时候其他队的得分要至少是3

3. 不可能有两支球队的得分同时为0,搜索的时候用这个剪下枝,不过好像作用不是很大

优化之后再跑那个数据,32MS,交之,AC,截止发稿前暂列status第一

 

【code】

 

原创粉丝点击