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.比较繁杂的模拟
解决方案:
步骤一:①审题析题:很重要,一定要在大脑中打底稿,搞清楚这道题的大概方向与算法可能性
②看注释,猜算法:实际上猜算法从题目和注释之中一定要得出结论,否则在接下来的做题填空中将一头雾水
③看程序,找突破:找到一个好的突破口是非常必要的,所以下笔的第一笔一定要慎重啊,一步错很可能导致步步错。
④造数据,回带验:重新模拟程序运行以得到正确结论也是十分重要的。