摘要: 原题链接: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) 编辑
摘要: 题目链接:背包问题求方案数 01背包 时间复杂度O(nm) 本题求01背包的最佳方案数,那么定义两个数组:f[N],cnt[n] f[i]用来储存背包容积为i时的最佳方案的总价值 cnt[i]为背包容积为i时总价值为最佳的方案数 先初始化所有的cnt[i]为1,因为背包里什么也不装也是一种方案 外层 阅读全文
posted @ 2020-11-29 00:20 hnkjdx_react 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 原题链接 有依赖的背包问题 题目描述 有依赖的背包问题是指物品之间存在依赖关系,这种依赖关系可以用一棵树来表示,要是我们想要选择子节点就必须连同父节点一块选。 我们可以吧有依赖的背包问题看成是分组背包问题中的一个组,子节点的每一种选择我们都看作是组内的一种物品,因此我们可以通过分组背包的思想去写。 阅读全文
posted @ 2020-11-29 00:01 hnkjdx_react 阅读(143) 评论(0) 推荐(0) 编辑