03 2019 档案
摘要:string的find函数找不到"\"转义字符,需要再添加一个"\\",这样就可以找到了
阅读全文
摘要:这题其实和回溯法是一样的,只不过剪枝的判断不一样了一点 这种方式的剪枝只有两种,第一种是,如果在给定的深度上全是最大的数字,也还是达不到要求,那么剪枝 另一种剪枝是超过了深度也同样要剪枝 所以在同一层中,枚举的上下界就是:比前一层枚举的那个数要小,下界是必须足够大,以至于这个深度都使用这个数,就超过
阅读全文
摘要:先实现高效的素数筛选法 然后再暴力的无平方数筛选法 然后再高效的平方数筛选法 以上代码是最高效的素数筛选法,有几个要点需要说一下啊,首先是基底必须是素数,这部分是靠!vis[i]实现的,然后是从i*i开始筛选 下面是暴力的无平方数的筛选 非常的暴力而且没有技术含量,这个函数只是用来判断是不是无平方数
阅读全文
摘要:这个时候边界不是很好确定,所以可以使用记忆化搜索比较容易一点 需要注意的一点是: 更新状态的时候,一定要使用dp(x),而不是d[x]
阅读全文
摘要:硬币问题有可能是无解的 定义状态d[i] 从i减到0的最少使用的硬币数 可能会无解 下面是代码
阅读全文
摘要:重点还是在状态 推荐使用的状态定义是:d[i][j] 往容量为j的背包里面放前i个物品的最大总重量 求任何的动态规划的题目都可以使用记忆化搜索和递推法 使用递推法必须倒着计算,即每次计算所需要的参数都必须算出来 下面附上我写的代码 这份代码里面初始化边界和计算分开进行了,紫书上写的是和起来的,值得细
阅读全文
摘要:数字三角形问题是DP的经典入门问题 一共有三种计算方式:直接递归计算(有一点回溯法的味道) 递推计算 记忆化搜索 其中记忆化搜索和直接递归计算非常的相似,只不过记忆化搜索将之前计算过的某些部分记录了下来,供以后使用。但是直接递归以前算过的依旧还是要算 下面贴上代码: 在n = 26的时候,直接递推速
阅读全文
摘要:只说需要注意的几点: 第一点,图必须是联通的,或者说,只求一张图中的一个联通子图,因为如果求了多个联通子图,输出的时候,并不知道d[]中包含的是哪一个子图的距离 第二点,d中,无解和有解需要分开,比如说,一张图是非联通的,求完其中的一个联通子图之后,肯定会有一些点没有涉及进来,这个时候,这些点的d中
阅读全文
摘要:紫书上称这个方式为路径寻找问题,实际上,这个就是一个BFS和一个节点查找表的结合 这里先采用STL中的set和hash表来实现查找表 实现hash的时候也是使用的利用数组进行动态创建 在这道题中学到的东西主要是: memxxxx等一系列内存管理函数的使用 首先是memxxx(a,b,size) a是
阅读全文
摘要:八皇后问题是入门回溯法的经典问题,本文借用八皇后问题来阐述一下笔者对于八皇后问题的一些看法。 在我看来,回溯法有点像高中时候的排列组合,都是可以在有限的步骤中完成,而每一步有只有有限的选择,这句话也构成了回溯法的核心。 每一次成功的放置,代表着解答树上某一个节点的产生:下面结合八皇后问题来描述 先来
阅读全文
摘要:求自己总共有三种方式: 增量构造 位向量 二进制 首先假设集合A中有n个元素,而且是非重集,一个下标唯一对应一个元素,那么求A的子集就变成了求0~n-1的子集。这个思想对于所有的三种方式都是通用的。 第一种增量构造法的思想是,每一次都从0~n-1中挑出一个元素来,每挑一次,就是一个集合。然后再挑元素
阅读全文
摘要:一共有三种求全排列的方式: 第一种就是只适合用于非可重集的DFS实现 第二种就是可以用于可重集上的刘汝佳书上的代码 第三种就是STL中的next——permutation 在对这三种方式做了比较之后发现: DFS实现的效率最高,当n = 10的时候耗时才不到2s,但是n = 11的时候耗时14s 这
阅读全文

浙公网安备 33010602011771号