7月清北学堂培训 Day 1
基础算法 模拟算法 面向测试算法 模拟算法的关键就是将人类语言翻译成机器语言。 要做到以下两点: 1.优秀的读题能力; 2.优秀的代码能力; 程序流程图: 读入,循环处理指令,输出; 读题是很重要的,我们要考虑到用什么样的方法,怎么写; 主要就是要看懂四条规则然后往里面填数就好了,好像很简单,那就看这个题: 我们要先抓住核心部分: 手里有n张牌,有k(k<?)个规则,每个规则可以打出一定的牌,请问要打出最小多少次牌; 一个明显的深搜: void dfs(剩下多少张牌没打last,打了多少次牌ans) { if(last==0) //牌打完了 回溯 if(k条规则) …… } 模拟题更强调的就是选手的代码能力,其特点是:题目特烦,细节超多,代码极长; 考验的全部都是选手写代码的基本功: 1.写长代码都不出错的能力; 2.多方面全地考虑问题; 前者要求我们有一个良好的代码习惯,而后者则要求我们在做题时头脑有清晰的逻辑; 注意标准形式缩进; 一个笑话: 所以写长代码的要领在于一遍就写对! Solution: 模块化结构(如何去思考一个问题?); 没想清楚时不动笔,画程序逻辑图; 写完一部分就检查一部分;最好一次AC; 在赛场上检验自己的程序是否正确的方式有两种: 1.造数据; 2.对拍; 对拍其实就是模拟算法的一种应用; 因为暴力算法的本质就是模拟(大雾) 2. 贪心算法