NOIP提高组完善程序题目分析

2015年

阅读程序写结果

1.白痴计算题:模拟

2.指针题:模拟

3.求最大字符串长度题:看算法

4.递归题:画树

完善程序

1.双子序列最大和

①审题析题:初步观测算法,是对经典算法的延伸拓展,只要类比到最大子段和,基本上本题的算法核心与总方针就八九不离十,本道题是及其特殊的一道——对经典算法的延伸

②看注释,猜算法:重点是对于数组作用的注释的观察,这道题看到注释基本明白,是要使用二次的最大子段和来进行求解,故对于理解算法有很大帮助

③看程序,找突破:从上一步可知,两端程序的结构应当是相似的,所以可以使用类比的方法把上一段程序与下一段程序进行对比,从而得出结论

④填空与模拟检验:注意,填完空之后要进行检验

2.最短路径问题

对于这种题型,是一种比较特殊的题型,其特点就是直接将算法披露给你,为我们省去了前两步的步骤,而注释也非常给力,基本算法核心写出。但是对于此题最怕的就是不知道,不了解题目中所给的算法。所以①对于算法要更广泛地接触②掌握算法实现能力,实质上这道初赛题已经面向复赛了,是十分有意义的。

2014年

阅读程序写结果

1.找三的倍数题:模拟

2.递归:画树

3.字符串名次数组冒泡排序:模拟,特殊算法

4.约瑟夫问题:模拟,特殊算法

完善程序

1.双栈模拟数组:

①审题析题:算法直接出:纯模拟

②看程序,找突破:其实本道题再稍微从程序中看看就明白,是在考察对于栈的操作,这也是一类题型:对于栈、队列等STL中的特殊数据结构操作的考察,基本上这一条基线定了,本题就解了

2.最大子矩阵和

①审题析题:①暴力搜索②动态规划——经典算法:最大字段和。

②看注释:关于rowsum的注释直接可以看出本题①有大概率采用动态规划②采用前缀数组,这是对于算法猜测与前两空的填空的基础

③看程序,找突破:程序要一分为二来看:①是预处理,②是解决问题

预处理基本上是前缀数组的处理,只要看懂注释都没问题。而解决问题实质上突破口就在循环上。循环实质上实在暴力枚举所有的列,而行的和则通过最大子段和的方法以及前缀数组搞定。所以本道题真正的算法是:半暴力半动态规划。搞明白这一点问题也迎刃而解。

2013年

阅读程序写结果

1.回文串:看输入

2.数学问题:公倍数公因数问题:画维恩图

3.特殊算法:最长不降子序列

4.广度有限搜索

完善程序:

1.新题型:多种算法选择题目。

内涵:对于算法优化的执着追求。

解题思路:

①解析算法:朴素,移动交换,指针(易从程序中看出)

②填空:多看注释,掌握指针的使用方法即可

2.两元序列

①审题析题:类比最大字段和算法。

②看注释,猜算法:采用模拟的算法,其中有动态规划的思想

③看程序,填空:分析因果逻辑:如果能继续,就继续增加,不能,看看是两元序列中的哪一个,继续发散。

思考:是否可能实现多元的序列呢?待求解。

总结方法:

一般来说阅读程序写结果就几类:

1.模拟 解决方案:模拟

2.递推 解决方案:模拟

3.递归 解决方案:画树

4.各种STL应用,以及对于指针等特殊数据结构的掌握

5.经典算法:约瑟夫,最长不降子序列,最大子段和。解决方案:直接出解

6.字符串处理 解决方案:模拟

7.简单动态规划 解决方案:推导问题是什么

8.简单数学模拟 解决方案:同上

注意可以观察程序的结构与输入数据来判断程序要干嘛

完善程序:

1.简单图论

2.简单动态规划

3.比较繁杂的模拟

解决方案:

步骤一:①审题析题:很重要,一定要在大脑中打底稿,搞清楚这道题的大概方向与算法可能性

②看注释,猜算法:实际上猜算法从题目和注释之中一定要得出结论,否则在接下来的做题填空中将一头雾水

③看程序,找突破:找到一个好的突破口是非常必要的,所以下笔的第一笔一定要慎重啊,一步错很可能导致步步错。

④造数据,回带验:重新模拟程序运行以得到正确结论也是十分重要的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值