大榕树 \ 信息学奥赛 \ 解题报告

《外公的难题》解题报告

原文链接:http://www.mydrs.org/program/list.asp?id=192

一、题意简述:

  现有N张(0

<=20) 点数小等于10的扑克牌。要求从N张牌中任选若干张分成M墩(每墩不超过5张),使得每墩的各张牌经过加、减、乘或添加括号的运算后都能得到24这个数字。

二、算法分析:

  这是一道搜索题,下面给出一种较为高效的搜索方法:

  1、首先求出所有可以计算出24点的牌墩,并记录下来。这部分预处理可以通过深度搜索来实现。它的状态空间的规模为 。在检验牌墩时,每次选出两张没有用过的牌,并选择一种运算,从而得到一张新的牌,直到只剩下一张牌就可以判断它是不是24。检验的费用约为: 。由此可见,预处理的时间耗费不大。

  2、然后对这些可以计算出24点的牌墩进行组合搜索,使得在不出现重复的牌的前提下选取尽可能多的牌墩,从而实现题目的要求。考虑到满足可以计算出24点的牌墩的数量并不多,所以这一部分的搜索量也是可以忍受的。在实现时可以进行一些优化,如优先选取牌数较少的排墩,进行上界估计等等,都可以从一定程度上提高算法的时间效率。

  附运行时间表格:




























































运行时间


运行时间

数据1

0.00s

数据11

0.05s

数据2

0.00s

数据12

0.38s

数据3

0.00s

数据13

0.44s

数据4

0.00s

数据14

0.00s

数据5

0.00s

数据15

0.44s

数据6

0.00s

数据16

0.05s

数据7

0.00s

数据17

0.00s

数据8

0.05s

数据18

0.00s

数据9

0.00s

数据19

0.05s

数据10

0.00s

数据20

0.71s


(测试环境:PIII600EB / 64MB)

三、总结:

  近年来搜索题在国际国内赛场出现的频率有所减少,但是,搜索题对于训练编程技巧和算法的优化能力都很有益处。选手在解决搜索题时,首先要有全局观,权衡影响搜索效率的各方面因素,选择一个正确高效的搜索方式,然后在此基础上考虑各种优化方法,优化时要注意优化费用和优化效果的平衡。由此可见,加强搜索题的训练是很有意义的。

  Sgoi4第二试第三题《外公的难题》题目、测试数据和标准程序由重庆刘汝佳同学提供,借此表示衷心的感谢。




作者:周牧昕 唐军军
来源:福州三中
时间:2001-08-28

上一篇:猜数字游戏(附源代码)
下一篇:《镇长的烦恼》解题报告

大榕树 版权所有 ©1999-2006