摘要: 这道题目的独特之处在于只保存边 阅读全文
posted @ 2019-03-09 16:11 Toretto瑞 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 这题其实和回溯法是一样的,只不过剪枝的判断不一样了一点 这种方式的剪枝只有两种,第一种是,如果在给定的深度上全是最大的数字,也还是达不到要求,那么剪枝 另一种剪枝是超过了深度也同样要剪枝 所以在同一层中,枚举的上下界就是:比前一层枚举的那个数要小,下界是必须足够大,以至于这个深度都使用这个数,就超过 阅读全文
posted @ 2019-03-08 15:56 Toretto瑞 阅读(662) 评论(1) 推荐(1) 编辑
摘要: 先实现高效的素数筛选法 然后再暴力的无平方数筛选法 然后再高效的平方数筛选法 以上代码是最高效的素数筛选法,有几个要点需要说一下啊,首先是基底必须是素数,这部分是靠!vis[i]实现的,然后是从i*i开始筛选 下面是暴力的无平方数的筛选 非常的暴力而且没有技术含量,这个函数只是用来判断是不是无平方数 阅读全文
posted @ 2019-03-07 14:53 Toretto瑞 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 其中辗转相除法的gcd函数是绝对的核心 阅读全文
posted @ 2019-03-07 14:00 Toretto瑞 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 这个时候边界不是很好确定,所以可以使用记忆化搜索比较容易一点 需要注意的一点是: 更新状态的时候,一定要使用dp(x),而不是d[x] 阅读全文
posted @ 2019-03-06 14:28 Toretto瑞 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 硬币问题有可能是无解的 定义状态d[i] 从i减到0的最少使用的硬币数 可能会无解 下面是代码 阅读全文
posted @ 2019-03-06 12:06 Toretto瑞 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 重点还是在状态 推荐使用的状态定义是:d[i][j] 往容量为j的背包里面放前i个物品的最大总重量 求任何的动态规划的题目都可以使用记忆化搜索和递推法 使用递推法必须倒着计算,即每次计算所需要的参数都必须算出来 下面附上我写的代码 这份代码里面初始化边界和计算分开进行了,紫书上写的是和起来的,值得细 阅读全文
posted @ 2019-03-06 10:01 Toretto瑞 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 数字三角形问题是DP的经典入门问题 一共有三种计算方式:直接递归计算(有一点回溯法的味道) 递推计算 记忆化搜索 其中记忆化搜索和直接递归计算非常的相似,只不过记忆化搜索将之前计算过的某些部分记录了下来,供以后使用。但是直接递归以前算过的依旧还是要算 下面贴上代码: 在n = 26的时候,直接递推速 阅读全文
posted @ 2019-03-05 11:32 Toretto瑞 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 只说需要注意的几点: 第一点,图必须是联通的,或者说,只求一张图中的一个联通子图,因为如果求了多个联通子图,输出的时候,并不知道d[]中包含的是哪一个子图的距离 第二点,d中,无解和有解需要分开,比如说,一张图是非联通的,求完其中的一个联通子图之后,肯定会有一些点没有涉及进来,这个时候,这些点的d中 阅读全文
posted @ 2019-03-05 09:46 Toretto瑞 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 紫书上称这个方式为路径寻找问题,实际上,这个就是一个BFS和一个节点查找表的结合 这里先采用STL中的set和hash表来实现查找表 实现hash的时候也是使用的利用数组进行动态创建 在这道题中学到的东西主要是: memxxxx等一系列内存管理函数的使用 首先是memxxx(a,b,size) a是 阅读全文
posted @ 2019-03-04 19:50 Toretto瑞 阅读(237) 评论(0) 推荐(0) 编辑