随笔分类 -  【9】算法基础

备战2019年第十届蓝桥杯大赛
摘要:动态规划的思维其实就是递推的思维,而记忆型递归擅长解决重叠子问题不重复求解。 动态规划用于解决多阶段决策最优化问题 三要素:阶段 状态 决策。 两个条件:最优子结构(最优化原理),无后效性:当前状态是前面状态的完美总结 动规解题的一般思路: 是否可以用动态规划,否则用搜索。 模型匹配:多做经典题目, 阅读全文
posted @ 2019-02-13 18:39 |旧市拾荒| 阅读(288) 评论(0) 推荐(0)
摘要:题目: 输出最长递增子序列的长度,如输入 4 2 3 1 5 6,输出 4 (因为 2 3 5 6组成了最长递增子序列)。 暴力破解法:这种方法很简单,两层for循环搞定,时间复杂度是O(N2)。 动态规划:之前我们使用动态规划去解决一般是创建一维数组或者二维数组来构建出dp表,利用之前的历史上dp 阅读全文
posted @ 2019-02-13 17:50 |旧市拾荒| 阅读(1498) 评论(1) 推荐(0)
摘要:问题描述: 有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤100,1≤wi,vi≤100,1≤W≤10000。注意:物品的数量是无限的,可以无限拿取。 在前面学习的基础上,其实这道题目并不难,首先普通的动规思路,在前面的01 阅读全文
posted @ 2019-02-13 15:21 |旧市拾荒| 阅读(1084) 评论(0) 推荐(0)
摘要:题目: 求解两个字符串的最长公共子序列。如 AB34C 和 A1BC2 则最长公共子序列为 ABC。 思路分析:可以用dfs深搜,这里使用到了前面没有见到过的双重循环递归。也可以使用动态规划,在建表的时候一定要注意初始化以及在发现规律的时候一定要想怎么利用前面已经算过的结果来得到现在的结果,或者利用 阅读全文
posted @ 2019-02-13 14:16 |旧市拾荒| 阅读(281) 评论(0) 推荐(0)
摘要:题目: 在数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。三角形的行数大于1小于等于100,数字为 0 - 99。 输入格式: 要求输出最大和。 思路分析: 这里的递归和记忆型递归都很容易理解, 阅读全文
posted @ 2019-02-13 11:37 |旧市拾荒| 阅读(2314) 评论(0) 推荐(0)
摘要:动态规划通常用于解决最优化问题,在这类问题中,通过做出一组选择来达到最优解。在做出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常就会很有效,其关键技术就是对每个这样的子问题都保存其解,当其重复出现时即可避免重复求解。做动态规划的题目新手一 阅读全文
posted @ 2019-02-13 10:25 |旧市拾荒| 阅读(663) 评论(0) 推荐(0)
摘要:题目: 有n个重量和价值分别为wi,vi的物品,从这些物品中挑选出总重量不超过W的物品,求所有挑选方案中价值总和的最大值。1≤n≤100,1≤wi,vi≤100,1≤W≤10000 输入: 输出: 普通递归型:因为每个物品只有选与不选两种情况,很容易写出递归代码,也可以理解为深搜。简单来说就是选择选 阅读全文
posted @ 2019-02-13 00:56 |旧市拾荒| 阅读(702) 评论(0) 推荐(0)
摘要:最优子结构:对比DFS,不是进行各种可选支路的试探,而是当下就可用某种策略确定选择,无需考虑未来(未来情况的演变也影响不了当下的选择)。只要一直这么选下去,就能得出最终的解,每一步都是当下(子问题)的最优解,那么最终得出的结果就是问题的最优解,这叫做最优子结构。 更书面的说法:如果问题的一个最优解中 阅读全文
posted @ 2019-02-12 19:47 |旧市拾荒| 阅读(346) 评论(0) 推荐(0)
摘要:题目一: 最优装载问题,给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不超过C。 经过前面的学习很容易想到贪心策略,那就是每次选重量最轻的物体,那么物体数就最多。 代码: 题目二: 部分背包问题,有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高 阅读全文
posted @ 2019-02-12 18:06 |旧市拾荒| 阅读(5080) 评论(0) 推荐(0)
摘要:题目: 字典序最小问题,给一个定长为N的字符串S,构造一个字符串T,长度也为N。起初,T是一个空串,随后反复进行下列任意操作:1. 从S的头部删除一个字符,加到T的尾部 2. 从S的尾部删除一个字符,加到T的尾部。目标是最后生成的字符串T的字典序尽可能小。1≤N≤2000。字符串S只包含大写英文字母 阅读全文
posted @ 2019-02-12 17:17 |旧市拾荒| 阅读(739) 评论(0) 推荐(0)
摘要:题目: 题目的大概意思是约翰这个农民有N条牛,这些牛可以在一天中的某个时间段可以进行工作,他想把这个时间段分成若干个片段让这些牛去进行打扫任务,你的任务是安排尽量少的牛然后可以完成分成这些片段的打扫任务。 输入: 第一行两个数,第一个数代表牛的个数N,第二个数代表时间T,表示的是时间段[1,T]。 阅读全文
posted @ 2019-02-12 11:59 |旧市拾荒| 阅读(1021) 评论(0) 推荐(0)
摘要:题目: 题目的大致意思是,给定n个闭区间,并且这个闭区间上的点都是整数,现在要求你使用最少的点来覆盖这些区间并且每个区间的覆盖的点的数量满足输入的要求点覆盖区间的数量。 输入: 第一行输入n,代表n个区间。 接下来的n行每行的第一个数代表区间起点,第二个数代表区间终点,第三个数代表这个区间必须要选取 阅读全文
posted @ 2019-02-12 10:47 |旧市拾荒| 阅读(2210) 评论(0) 推荐(0)
摘要:题目: 有n项工作,每项工作分别在si时间开始,在ti时间结束。对于每项工作,你都可以选择参与与否。如果选择了参与,那么自始至终都必须全程参与。此外,参与工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也是不允许的)。你的目标是参与尽可能多的工作,那么最多能参与多少项工作呢? 1≤n≤100 阅读全文
posted @ 2019-02-08 18:53 |旧市拾荒| 阅读(601) 评论(0) 推荐(0)
摘要:问题: 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行动时所需的时 阅读全文
posted @ 2019-02-08 17:52 |旧市拾荒| 阅读(2367) 评论(0) 推荐(0)
摘要:题目: 有1元,5元,10元,50元,100元,500元的硬币各c1,c5,c10,c50,c100,c500枚。现在要用这些硬币来支付A元,最少需要多少枚硬币?假定本题至少存在一种支付方案。0≤ci≤109,0≤A≤109 输入:第一行有六个数字,分别代表从小到大6种面值的硬币的个数,第二行为A, 阅读全文
posted @ 2019-02-08 15:17 |旧市拾荒| 阅读(517) 评论(0) 推荐(0)
摘要:有一类问题,是逐步生成结果的形式,有明确的递推形式,边界非常明确,比较容易用迭代形式实现,用递归也有较为明确的层数和宽度 ,这类问题,能用迭代就用迭代,用递归很大可能会超时,当然封闭形式的解最好。例如:走楼梯,走方格,硬币表示,括号组合,子集,全排列。 有另外一类问题,解的空间很大(往往是阶乘级别的 阅读全文
posted @ 2019-02-04 09:11 |旧市拾荒| 阅读(280) 评论(0) 推荐(0)
摘要:题目: 问题描述:如果一个字符串包含两个相邻的重复子串,则称它为容易的串,其他串称为困难的串。如:BB,ABCDACABCAB,ABCDABCD都是容易的,A,AB,ABA,D,DC,ABDAB,CBABCBA都是困难的。 输入正整数L,n,输出由前L个字符(大写英文字母)组成的,字典序第n小的困难 阅读全文
posted @ 2019-02-02 12:03 |旧市拾荒| 阅读(395) 评论(0) 推荐(0)
摘要:题目: 输入正整数n,对1-n进行排列,使得相邻两个数之和均为素数,输出时从整数1开始,逆时针排列。同一个环应恰好输出一次。n<=16 如输入: 输出: 代码: 结果: 阅读全文
posted @ 2019-02-02 11:29 |旧市拾荒| 阅读(329) 评论(0) 推荐(0)
摘要:回溯: 递归调用代表开启一个分支,如果希望这个分支返回后某些数据恢复到分支开启前的状态以便重新开始,就要使用到回溯技巧,全排列的交换法,数独,部分和,用到了回溯。下一个状态在开始之前需要利用到之前的状态,此时需要进行回溯,因为之前的状态对现在的状态存在着影响。 剪枝: 深度优先搜索的时候如果已经明确 阅读全文
posted @ 2019-02-01 23:58 |旧市拾荒| 阅读(350) 评论(0) 推荐(0)
摘要:题目: 有一个大小为 N*M 的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对 W 的*的部分) 限制条件:N, M ≤ 100 样例输入: 园子如下图('W'表示积水, '.'表示没有积水) 输出: 思路: 这道题目很经典,值得以后多去研 阅读全文
posted @ 2019-02-01 22:44 |旧市拾荒| 阅读(1198) 评论(0) 推荐(0)