算法01 递推算法

递推是一种处理问题的重要方法。 递推通过对问题的分析,找到问题相邻项之间的关系(递推式),从起点出发(首项或者末项)然后使用循环不断地迭代,得到最后需要的结果。 对于Fibonacci数列,已知:fib(1) = 1; fib(2) = 1; 从第三项开始满足公式fib(i) = fib(i-1) + fib(i-2)。输入一个整数n(1<=n<=100),求fib(n)的值。 【输入

算法02 递归算法

在编程中,我们把函数直接或者间接调用自身的过程叫做递归。 递归处理问题的过程是:通常把一个大型的复杂问题,转变成一个与原问题类似的,规模更小的问题来进行求解。 函数的参数。在用递归解决问题时,要合理地去设计函数的参数,达到当前问题与子问题之间的变化,可以通过参数进行准确地描述。 递推关系。要能够找到当前问题与子问题之间的联系,能够用子问题去描述当前问题的解。 递归出口(边界条件)。要找到问题的边界

算法03 模拟算法之一维数组相关内容详解

模拟算法就是模拟题目给的操作,用代码一步一步的描述出来即可。在过程中使用的都是我们已知的各种方法,如数组元素调用、排序、枚举等等,只是这些过程一般比较复杂。本次课程主要针对一维数组的模拟。 在各类算法竞赛中,包括CSP-J/S,NOIP等竞赛,经常会出现各类“模拟题目”,遇到这种题大家不需要害怕,甚至可以将其作为“送分题”,因为你只需要按照题目叙述的方式来写程序就能得到最终答案。模拟不是一种算法,

算法04 模拟算法之普通二维数组相关详解

直接来训练下普通二维数组的题目。 给定一个m行n列的矩阵,求矩阵外围元素之和。所谓矩阵外围的元素,是矩阵第一行、最后一行、第一列和最后一列的所有元素。 【输入描述】第1行:为两个整数,分别表示矩阵的行数m和列数n,中间以一个空格间隔; 接下来m行为该矩阵m行n列的元素,且都为整数,每一行元素之间以一个空格隔开。 【输出描述】一个整数,表示该矩阵外围元素之和。 【样例输入】 3 4 1 2 2 1

算法05 贪心算法

贪心算法(greedy algorithm),是用计算机来模拟一个「贪心」的人做出决策的过程。这个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前,并不考虑以后可能造成的影响。 可想而知,并不是所有的时候贪心法都能获得最优解,所以一般使用贪心法的时候,都要确保自己能证明其正确性。   贪心算法有两种证明方法:反证法和归纳法。一般情况下,一道题只会用到其中的

算法06 二分查找

二分查找又称为折半查找,主要用于查找一个有序数组中某一个数的位置。 主要思想如下: 在一个有序数组中,取数组的中间值与要查找的数进行比较; 若要查找的数等于中间值,查找成功。   若要查找的数大于中间值,则在右半区间继续取中间值与要查找的数进行比较; 若要查找的数小于中间值,则在左半区间继续取中间值与要查找的数进行比较; 直至最后要查找的数未出现过与中间值相等的情况,查找失败  

算法07 深度优先搜索

现在有一个3*3的迷宫,小知在迷宫的左上角,迷宫出口在右下角,请你帮小知算一算,他有多少种方案可以走出迷宫(每个格子不能重复走动)。 迷宫中显示0的点,是不可以走的。小知每次只能到达相邻的上下左右4个格子。 1.如果当前出发的格子是终点,则程序结束。 2.每次可以选择的格子有:上(A)、下(B)、左(C)、右(D)。 3.按照顺序尝试每个格子是否可走。 4.找到第一个可以走的格子(假设为B),标记

算法08 广度优先搜索

现在有一个4*4的迷宫,小知在迷宫的左上角,迷宫出口在右下角,小知体力有限,他希望尽快走出迷宫,请你告诉小知最少需要走多少步(每个格子不能重复走动)。 迷宫中显示0的点,是不可以走的。小知每次只能到达相邻的上下左右4个格子。 我们可以按照这样的思路去找: 从起点出发,检查第1步可以到达的所有点,判断是否为终点。 依次从第1步到达的点出发, 检查判断第2步可以到达的点是否为终点。 依次从第2步到达的

算法09 模拟算法之日期模拟

无论是中小学编程竞赛还是大学生编程竞赛,日期模拟都是经常会出现的题目。 日期模拟经常会出现以下题型: 得到某年某月的天数 判断给定日期的合法性 给定年份,求这一年第n天的日期 给定年月日,求经过n天后的日期 查找两个日期之间有多少个回文日期... ...   得到某年某月的天数问题经常会作为其他问题的模板来使用。 首先我们需要存储一年中所有月份相对应的天数 int day = {0,31,28

算法10 动态规划DP入门

动态规划是一种处理问题的算法思想,这些问题主要有以下特征: 问题可以按时间顺序分解成若干相互联系的阶段,在每个阶段都需要做出决策。 我们可以把当前的问题分解成若干个规模更小的子问题,当前问题的最优解,可以由子问题的最优解得到。 某阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响。 动态规划方法将问题分解为一组更简单的子问题,在求解每个子问题时,会将子问题的解保存起来,在后面遇到相