算法03 模拟算法之一维数组相关内容详解
模拟算法就是模拟题目给的操作,用代码一步一步的描述出来即可。在过程中使用的都是我们已知的各种方法,如数组元素调用、排序、枚举等等,只是这些过程一般比较复杂。本次课程主要针对一维数组的模拟。 在各类算法竞赛中,包括CSP-J/S,NOIP等竞赛,经常会出现各类“模拟题目”,遇到这种题大家不需要害怕,甚至可以将其作为“送分题”,因为你只需要按照题目叙述的方式来写程序就能得到最终答案。模拟不是一种算法,
算法04 模拟算法之普通二维数组相关详解
直接来训练下普通二维数组的题目。 给定一个m行n列的矩阵,求矩阵外围元素之和。所谓矩阵外围的元素,是矩阵第一行、最后一行、第一列和最后一列的所有元素。 【输入描述】第1行:为两个整数,分别表示矩阵的行数m和列数n,中间以一个空格间隔; 接下来m行为该矩阵m行n列的元素,且都为整数,每一行元素之间以一个空格隔开。 【输出描述】一个整数,表示该矩阵外围元素之和。 【样例输入】 3 4 1 2 2 1
算法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入门
动态规划是一种处理问题的算法思想,这些问题主要有以下特征: 问题可以按时间顺序分解成若干相互联系的阶段,在每个阶段都需要做出决策。 我们可以把当前的问题分解成若干个规模更小的子问题,当前问题的最优解,可以由子问题的最优解得到。 某阶段的状态一旦确定,则此后过程的演变不再受此前各种状态及决策的影响。 动态规划方法将问题分解为一组更简单的子问题,在求解每个子问题时,会将子问题的解保存起来,在后面遇到相