03 2019 档案
摘要:最近对状态的初始化有点迷... 网上也没有这方面的博客之类的,只能自己悟了... 自己觉得状态初始化应该想状态转移过程中到底有哪个最初状态转移过去的... 例如依赖性背包,就迷了很多天,刚开始的代码: 然后就不出意料的wrong,直到看到正解与我不同,才将f[x][ww[x]]=vv[x];改成fo
阅读全文
摘要:见题: 看一眼,就知道是个依赖性背包,于是乎就草草的打了树上DP,一交发现才20,仔细检查也没错呀,忍不住点了题解,只喵一眼看到了强联通缩点等的字样,又重新审了一遍题,发现这句话理解有偏差:软件i只有在安装了软件j(包括软件j的直接或间接依赖)。题目并未说i依赖j时,j就不能依赖i了,所以就形成了环
阅读全文
摘要:某位大佬的题解: 给树形DPの初学者(其实就是我哈哈(๑•̀ㅂ•́)و✧) 其实这个题不知道为什么是提高+/省选- 还是比较简单的 瞄一眼下去就是DP 但是怎么DP呢? 可以发现学习课程是有顺序的 我马上想到了DAG 然后又发现每门课有最多有一个先修课 所以这一定是一个森林 为了方便处理也是为了迎合
阅读全文
摘要:并查集是个很实用的数据结构,主要功能可以动态维护若干个不重叠的集合,并支持合并与查询,当然这些都只是概念,个人理解并查集能够维护具有传递性的关系,还可有维护节点之间的连续性,克鲁斯卡尔就是这样做到的.普通的并查集就是如此,今天介绍并查集的扩展,看题: 题目一看便知道要用到并查集,判断在不在一列可以普
阅读全文
摘要:不多说,直接上题: 这个题目猛的一看毫无思路,想用爆搜... 鄙人同样,这个题曾经卡了我很多月... 看这个题的输入格式,明显和搜索没什么关系。 再看看样例仔细思考,发现各个影子的高度与最终答案有关. 再看样例,第一张图很明显的告诉我们建筑数与相邻近影子的高度有关,再看第二张与第三张,就没有一点头绪
阅读全文
摘要:这些知识总算啃掉了... 重要的思路就是加入栈和队列时还要加入元素的坐标位置。 使用单调栈可以找到元素向左遍历第一个比他小的元素,也可以找到元素向左遍历第一个比他大的元素。 单调栈就简单点,只有栈顶可以操作,若要找到从左到右第一个比i大的数,就保证严格递减,这样如果到第一个比i大的数是i就会被弹出,
阅读全文
摘要:今天搞了一道大水题,却屡次wrong,不说了,见题目: 和背包问题类似,个人刚开始打了很久... DP有时还要利用贪心,比如这道题,歌如果放不下第j个磁盘,就放上一个的最后位置; 最后要说的就是状态转移必须切合实际,依照实情转移状态:本题中的else if(j>1&&t>=w[i])就让我改了许久!
阅读全文
摘要:最近搞了许多背包的题,总结一下各自用法: 01背包:各个商品最多一件,用for()时倒序保证只能取一次; 完全背包:各个商品无限件,用for()时正序保证在背包范围内能一直取; 多重背包:各个商品有a[i]件,对每个商品进行讨论,分成完全背包与01背包,拆分只学会了二进制拆分,代码如下: int a
阅读全文