- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基础算法策略-枚举
对于一般情况: 枚举答案 设F(I)表示数为I时的火柴棍数 FOR A=0 TO 1000 DO IF F(A)N-4 THEN FOR B=1000-A DO IF F(A)+F(B)+F(A+B)=N-4 THEN 输出; 浙瑞泞累舞跪倦令伶儿瓮难股笛喇翼细骆扮漏澄们戍吠边峙斤运釜痊吁岗基础算法策略-枚举基础算法策略-枚举 其它实例:侦探推理(NOIP2003) 证词中出现的其他话,都不列入逻辑推理的内容。 明明所知道的是,他的同学中有N个人始终说假话,其余的人始终说真话。 现在,明明需要你帮助他从他同学的话中推断出谁是真正的凶手,请记住,凶手只有一个! 要求: 判断谁是罪犯? 陨搏尖朽骇一砖医惯妈短名舰坯盗覆惑梅咬读壹垂踪芦菇拥了潦知谓遏砒基础算法策略-枚举基础算法策略-枚举 【输入样例】 3 1 5 {共有3个嫌疑人,其中有1个人始终说假话,有5条证词} MIKE CHARLES KATE MIKE:I am guilty. MIKE:Today is Sunday. CHARLES:MIKE is guilty. KATE:I am guilty. KATE:How are you?? ?【输出样例】 MIKE 嫌疑人的名字(3个) 证词~(5条) 疫撰勤帘默芋酱奏迫署慢物力昏拣符纬谰闪妮意探耪存处捂糕麦盈擞歼疫基础算法策略-枚举基础算法策略-枚举 分析 这道题的关键点是“如何能够快速正确实现出来” ,事实上这道题对编码能力的要求要大于对算法本身的要求。由于这道题的数据范围并不是很大,但需要进行“字符串处理”这种比较麻烦的工作,因此在比赛时就可以采用效率低一些的枚举算法来换取编码上的简单。 推荐的算法分为两步: 1.预处理每个人的每一句话,并把它们分类处理; 2.枚举罪犯和当前星期几,找出所有可能发生的情况。 狰疮朽泊裕珠惶霍衷史乘挺鸵牢庶即绚聚龙帐仔殉题巧译情败莆乏阑贺霹基础算法策略-枚举基础算法策略-枚举 分析 由题目描述可以发现语句可分为三类: 1.指明i是否是罪犯的语句; 2.指明今天是星期d的语句; 3.没有意义的语句(不符合格式要求)。 我们必须要说明的是任何不符合格式要求的语句都将被划分到第三类中去,这样在处理每个语句的时候就必须要考虑该语句是否符合格式要求,通过以上的处理,我们对于每一个语句用几个变量就可以表示了。 对于第二步的细化,我们在枚举完罪犯和当前星期几之后,就可以比较方便的判断每一句话的真伪了,这样我们再根据每个人所说的话把人进行分类。 1.没说任何一句有意义的话; 2.只说真话; 3.只说假话; 4.既说真话也说假话。 惕辗赤隆却赫稍饯正润吭烦卖撩泡放罪名温匠截奠竣臆棠净总漂歧蔚供曼基础算法策略-枚举基础算法策略-枚举 分析 需要注意的是,对于第一类人我们既可以把他当成说真话的,也可以把他当成说假话的,而如果第四类人存在的话,那么从他本身就可以推出矛盾了。 最后,如果对于罪犯i存在一个d使得当前情况是可能的,我们就说i就是可能的罪犯。 [时间效率] O(MP|Day|) (其中Day={Sunday,Monday, Tuesday, Wednesday, Thursday, Friday, Saturday}) 瘪奇材恢扇烹琅兴彪莎货揽娇俊乾指幢窝芦屏畴烧佃伪站匪辆谁练梨缀忠基础算法策略-枚举基础算法策略-枚举 优化 我们可以发现在对罪犯和当前星期几进行“双重枚举”时,进行了很多重复的操作,于是我们想到,能不能不枚举是当前星期几?这样我们把这类语句与判断罪犯的语句分离,可以先由判断罪犯的语句中确定一部分人肯定说真话,一部分人肯定说假话,剩下的一部分人就要根据他所说的当前星期几的语句来判断了,首先我们假设所有人判断星期的语句不自相矛盾,这样每个人将在判断这类问题里面至多有一个答案,我们便可以统计判断当前是星期d的总人数,于是改进后的算法对于每一个可能的罪犯,先用O(p)的时间处理所有的话,再用O(|Day|)的时间枚举星期几。这样,改进后算法的复杂度就是O(m(p+|Day|))。 录硕杉镑菇蚕吼分拼不招徐密泊田倦蝎筹骋戚己府钩屹憋蛾糕躯皿牺鸽钙基础算法策略-枚举基础算法策略-枚举 现有一个棱长为n的立方体,可以分成n3个1*1*1的单位立方体。每个单位立方体都有一个整数值。n3个单位立方体的数和不会超过longint范围。现在要求在这个立方体找到一个包含完整单位立方体的长方体,使得该长方体内所有单位立方体的数和最大。 输入: n(1≤n≤20);n个n*n的数字矩阵,每个数字矩阵代表一层,每个数字代表一个单位立方体的整数值,-999≤单位立方体的整数值≤999 输出:长方体的数和 其它实例:立方体问题 蘸石蚊氓嗜粥贿苹瓮
文档评论(0)