Northeastern Europe 2007, Northern Subregion History Of Football

【题目描述】

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

 

【输入输出】

n (2 <= n <= 8)

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

输出可能的结果数

 

下面是样例

3

3

3

3

 

2

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

Possible table number 1

TeamABCPoints
A-303
B0-33
C30-3

 

Possible table number 2

TeamABCPoints
A-033
B3-03
C03-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】

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值