![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
紫书笔记
紫书的各章节学习笔记
不拿牌不改名
ACM刚入门,博客写错了可以留言给我啊
展开
-
树的最长路径(最远点对,树的直径)学习笔记
树的最长路径紫书第281页;紫书这章讲的就是树上的动态规划,所以显然,求这个可以用动态规划求;在求这个之前,要明白无论是树的最大独立集,树的重心,树的最长路径都是无根树,说白了就是没有告诉你根结点是什么。所以不能指定 1 号点就一定为要求路径中的起点或必经之点;这里还有一种dfs的写法,先随便找一个点 p 为起点,用dfs求出 p 的最远点 q,然后再用 q 为起点,找出最远点 w ,...原创 2020-02-25 19:47:19 · 816 阅读 · 0 评论 -
Dilworth定理 学习笔记
Dilworth定理简单来说:一个序列的最长递增子序列的长度 等于 这个序列的最长不递增(包含递减和相等)子序列的个数和;相反,一个序列的最长递减子序列的长度 等于 这个序列的最长不递减(包含递增和相等)子序列的个数和;...原创 2020-02-17 20:31:19 · 257 阅读 · 0 评论 -
二进制枚举 学习笔记
二进制枚举紫书215页暴力求解法里面有一道题目(Cutting Chains UVA - 818 )要用到二进制枚举,所以学了一下;总结来说就是对n个事件(n<32);每个事件都有两种情况,所以可以用0和1来表示事件的发生和不发生,每个事件的序号又可以和二进制位相对应,所以全部n事件的状态,可以用1到2^n的数字的二进制来表示;然后根据一个数的二进制0和1的状态来判断是否符合条件,是一...原创 2020-02-10 15:26:58 · 389 阅读 · 0 评论 -
IDA*搜索算法学习笔记
IDA*紫书第207页;紫书在介绍迭代加深搜索时提到了一种搜索算法IDA*,个人认为IDA算法是A算法和迭代加深算法的结合体;总的来说,IDA*算法的基本思路就是:1.主函数枚举最大搜索树的层数,如果再当前的层数中可以出现答案,则这个层数就为答案的最小层数;2.dfs函数一般有两个参数,一个是当前层数,一个是最大层数;dfs函数的前面部分一般是判断当前剩余层数是否可以得出解(这个就是俗称...原创 2020-01-18 16:26:49 · 590 阅读 · 0 评论 -
Zombie's Treasure Chest(UVA - 12325 )
Zombie’s Treasure Chest紫书第210页;这道题非常有意思,第一眼看上去以为是01背包,但是体积可以1e9,说明不是背包;看书上解析,发现这种暴力方法,或者说根本不是暴力,实在太过于巧妙了;两种物品,最简单的方法枚举一种,计算另外一种,但是当n/s1或者n/s2都非常大时,这个算法明显就不行了;这时可以比较s2v1和s1v2的大小,取s2个一号物品,s1个二号物品,所...原创 2020-01-16 23:14:09 · 165 阅读 · 0 评论 -
八皇后问题带来的思考和做题技巧
八皇后问题紫书第191页紫书用了3面来讲这道题,可见这道题的重要性,这种题老早就接触过,但是现在再来看发现这种题还是有许多可以再发掘的知识点;第一:对问题的建模能力;八皇后问题可以把它和求全排列问题归为一类,一个复杂的问题就化为了一个较为简单的模型;第二:对算法复杂度的降低八皇后问题的复杂度最高的在于判断是否是重复点,如果用简单的枚举前面经过的点来判断,多半是会超时的,书上用到了二维棋...原创 2020-01-08 17:14:32 · 404 阅读 · 0 评论 -
利用位运算求子集
位运算求子集紫书第189页给你一个集合,让你求集合的所有子集;我们都知道长为n的集合子集个数为 2^n 个(包含了空集);一般都是递归求子集,没想到还可以运用位运算求;具体思路就不展开了,总的来说就是每个元素在子集里都有两种情况(取或不取),可以用0和1来代表,这就跟位运算的性质所吻合;代码:#include<bits/stdc++.h>#define LL long ...原创 2020-01-07 22:49:43 · 473 阅读 · 0 评论 -
C++ STL next_permutation和prev_permutation
紫书第187页next_permutation函数作用:使排列变成字典序更大的下一个排列;用法:next_permutation(数组起始地址,数组结尾地址);如果有下一个排列,返回true,否则返回false;代码:#include<bits/stdc++.h>#define LL long long#define pa pair<int,int>#def...原创 2020-01-07 21:32:24 · 143 阅读 · 0 评论 -
背包是否恰好装满问题(紫书第265页)
背包是否恰好装满问题之前学的背包都是dp[v]取到最大值,以为最后那个一定是最大值,当看到紫书的那道题目时,要求的是恰好等于v的最大值是多少,很明显当组不成v时,是无法取得值的;跟普通的01背包相比,恰好背满的背包不同的就是赋初值的部分:1.普通背包就是全部赋为0;2.恰好装满就是:求最大值时,除了dp[0] 为0,其他都初始化为无穷小 -0x3f3f3f3f;求最小值时,除了dp[0...原创 2019-11-22 21:16:22 · 168 阅读 · 0 评论 -
整数溢出问题(紫书第23页和54页)
整数溢出问题int型的整数取值范围为-2147483648到2147483647,即-2^31到2 ^31-1;因为int型的整数有32位字节,所以最大可以表示到2^32,但是还有负数,所以只能到2 ^31-1;涉及到反码和补码问题;这在树状数组里面还有涉及,非常重要;但是这对于很多题目来说范围还是远远不够,所以引入了longlong型的整数,范围为-2^63到2 ^63-1,具体情况跟in...原创 2019-10-31 19:10:08 · 147 阅读 · 0 评论