摘要: 在多重背包问题中物品的数量被限制,没办法法像完全背包或者01背包那样简单的dp 但是通过二进制优化仍可以将多重背包问题转化为01背包问题 我们可以将每一个物品的数量按二进制的办法分成很多份 比如一个物品的数量是9 那么就可以将1,2,4,2将物体分成四份 同时该物体的价值和质量都变成1,2,4,2这 阅读全文
posted @ 2021-05-18 21:30 redintonc 阅读(161) 评论(0) 推荐(0)
摘要: 搞了好久终于来写dp了 完全背包问题和01背包问题只有一个区别,就是完全背包中物品可以取无数次但01背包只能取一次。 而因此带来的解法也只有一个不同,那就是用滚动数组时01背包要从后向前枚举而完全背包只需要从前往后枚举即可,具体为什么这个问题属实困惑了我一阵子。 完全背包从前向后枚举时前面的状态可能 阅读全文
posted @ 2021-05-18 20:43 redintonc 阅读(379) 评论(0) 推荐(0)
摘要: 问题描述: 在数轴上有连续的n家居民,在数轴上建立一家商店,使得商店到各个居民的距离之和最小。 结论:这些点的中位数就是目标点。 证明:* * * * * * * * * * 在上面10个点中任意找一个点。比如说红点作为目标点,左边5个,右边4个,则试着尝试移动该目标点。看一下距离之和的变化状态。 阅读全文
posted @ 2021-05-13 21:13 redintonc 阅读(368) 评论(0) 推荐(0)
摘要: 本来以为是一个很简单的剪枝,谁知道一直过不去。 本来想通过判断入度等于一的点来判断是否为叶子节点,但这样是不正确的,因为可以构造出两点一边的数据,使得根节点的入度也为1,于是终于过了。 #include<iostream> #include<vector> using namespace std; 阅读全文
posted @ 2021-04-28 21:13 redintonc 阅读(45) 评论(0) 推荐(0)
摘要: 看了一个晚上才搞懂,果然是太蒟蒻了。 kmp匹配主要是用于在一个字符串中查找一个比它小的字符串的位置,在传统的暴力算法中,时间复杂度会达到m*n,所以这时候就出现了更加快的kmp匹配算法。 和其他更快的算法相同,kmp也是一种用空间换时间的算法,通过对要查找的字符串的预处理来达到更快的效果,实际时间 阅读全文
posted @ 2021-03-17 20:59 redintonc 阅读(57) 评论(0) 推荐(0)
摘要: 最长**子序列是动态规划中的经典问题,而dilworh定理也是其中重要的一环。 经典的问题那必然也就有经典的例题 P1020 [NOIP1999 普及组] 导弹拦截 题目中第一问要我们求最长不上升子序列。 具体的做法是:假设我们现在有一个不上升序列 5 4 2 2 然后我们碰到了一个数字3,现在序列 阅读全文
posted @ 2021-03-11 21:57 redintonc 阅读(162) 评论(0) 推荐(0)
摘要: 难得自己想出最后一题,十分开心的来写题解。 题目给我们一段数组,然后让我们将其分为三段,使得第一段的最大值等于第二段的最小值等于第三段的最大值。 这种区间问题显而易见就得用一些对区间操作的数据结构比如st表树状数组啥的,我比较喜欢线段树那必然就用线段树了。 要寻找的话用n^2的枚举显然是不现实的,所 阅读全文
posted @ 2021-03-09 12:01 redintonc 阅读(109) 评论(0) 推荐(0)
摘要: 蒟蒻调了巨久终于调出来了。 题目大意 给出一个基环树,求树中的简单路径数目。 经过观察我们可以发现,在一个环中从一个点到另一个点有两条路径,但在树中从一个点到另一个点就只有一条路径。 所以我们不妨用一个容斥的思想,先把两个点之间的路径都设为两条,然后排除那些不正确的。 那么便是n*(n-1)-∑s* 阅读全文
posted @ 2021-03-08 18:42 redintonc 阅读(51) 评论(0) 推荐(0)
摘要: 原来高中的时候就不知道这公式怎么来的,现在终于知道了,有关组合数将继续跟进。 阅读全文
posted @ 2021-03-05 13:18 redintonc 阅读(65) 评论(0) 推荐(0)
摘要: 原来学习最小生成树的时候写了道题,发现得用最近公共祖先迫于无奈便学了LCA(不过确实很有用) LCA主要基于一种倍增的思想,和st表很像,通过预处理数据来花费空间换取时间。 要想学习怎么求LCA首先要学习LCA是什么。 在一颗数中,比如说图中的4和5,那么他们的最近公共祖先便是2。 如果是2和3他们 阅读全文
posted @ 2021-02-27 21:19 redintonc 阅读(58) 评论(0) 推荐(0)