摘要: 原题链接:96. 奇怪的汉诺塔 解题思路: 首先考虑n个盘中3座塔的经典问题,设d[n]表示求解改n盘3塔问题的最少步数,显然有d[n]=2*d[n-1]+1,既把前n-1个盘子从A柱移动到B柱,然后把第n个盘子从A柱移动到C柱,最后把前n-1个盘子从B柱移动到C柱。 回到本题,设f[n]表示求解n 阅读全文
posted @ 2020-12-18 17:59 hnkjdx_react 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 原题链接:95. 费解的开关 解题思路: 在上述规则的01矩阵的点击游戏中,很容易发现三个性质: 1.每个位置至多被点击一次 2.若固定了第一行(不能再改变第一行),则满足题意的点击方案至多只有一种。 其原因是:当第i行某一位为1时,若前i行已经被固定,只能点击第i+1行该位置上的数字才能使得第i行 阅读全文
posted @ 2020-12-18 17:34 hnkjdx_react 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 原题链接:94. 递归实现排列型枚举 解题思路: 该问题也称全排列问题,所有可能的方案总数有n!种。在这里,递归需要求解的问题是“把指定的n个整数按照任意次序排列”,在每次递归中,我们尝试把每个可用的数作为数列中的下一个数,求解“把剩余的n-1个整数按照任意次序排列”这个规模更小的子问题 样例代码: 阅读全文
posted @ 2020-12-18 17:08 hnkjdx_react 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 原题链接:93. 递归实现组合型枚举 解题思路 根据92.递归实现指数型枚举里的思路,我们只需要在上面指数型枚举程序的calc函数开头添加以下这条语句即可: if (chosen.size() > m || chosen.size() + (n - x + 1) < m) { return; } 这 阅读全文
posted @ 2020-12-18 16:56 hnkjdx_react 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 原题链接:92. 递归实现指数型枚举 解题思路 这等价于每个整数可以选可以不选,所有可能的方案总数有2的n次方种,通过前两节的学习我们已经知道可以进行一次循环,利用位运算来列举所有的选择方案。这一次我们使用递归来求解,在每一次递归中分别尝试某个数“选”还是“不选”两条分支,将尚未确定的整数数量减少1 阅读全文
posted @ 2020-12-18 16:36 hnkjdx_react 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 原题链接:998. 起床困难综合症 本题是让我们选择[0,m]之间的一个整数x,经过给定的n次位运算,使结果ans最大。 位运算的主要特点之一是在二进制表示下不进位。正因为如此,在x可以任意选择的情况下从,参与位运算的各个位(bit)之间是独立无关的。换言之,对于任意的k(0<=k<30),“ans 阅读全文
posted @ 2020-11-29 23:05 hnkjdx_react 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 原题链接:91. 最短Hamilton路径 解题思路 首先想下暴力算法,这里直接给出一个例子。 比如数据有 55 个点,分别是 0,1,2,3,4 那么在爆搜的时候,会枚举一下六种路径情况(只算对答案有贡献的情况的话): case 1: 0→1→2→3→4 case 2: 0→1→3→2→4 cas 阅读全文
posted @ 2020-11-29 22:46 hnkjdx_react 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 原题链接:64位整数乘法 解题思路 方法一 类似快速幂的思想,把整数 b 用二进制表示,即b=c(k-1)pow(2,k-1)+c(k-2)pow(2,k-2)+......+c(0)pow(2,0),那么a*b=c(k-1)*a*pow(2,k-1)+c(k-2)*a*pow(2,k-2)+... 阅读全文
posted @ 2020-11-29 22:24 hnkjdx_react 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 题目链接:a^b 解题思路 根据数学常识,每一个正整数可以唯一表示为若干指数不重复的2的次幂的和。也就是说,如果b在二进制表示下有k位,其中第i(0<=i<k)位的数字为ci,那么: 因为k=log2(b+1)的向上取整,所以上式乘机项的数量不多于log2(b+1)的向上取整个。又因为: pow(a 阅读全文
posted @ 2020-11-29 22:06 hnkjdx_react 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 题目链接:背包问题求具体方案 算法一 题目要求输出字典序最小的解,假设存在一个包含第1个物品的最优解,为了确保字典序最小那么我们必然要选第一个。那么问题就转化成从2~N这些物品中找到最优解。之前的f(i,j)记录的都是前i个物品总容量为j的最优解,那么我们现在将f(i,j)定义为从第ii个元素到最后 阅读全文
posted @ 2020-11-29 00:28 hnkjdx_react 阅读(131) 评论(0) 推荐(0) 编辑